/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.widget;

import android.database.DataSetObservable;
import android.database.DataSetObserver;

Base class for a ExpandableListAdapter used to provide data and Views from some data to an expandable list view.

Adapters inheriting this class should verify that the base implementations of getCombinedChildId(long, long) and getCombinedGroupId(long) are correct in generating unique IDs from the group/children IDs.

See Also:
/** * Base class for a {@link ExpandableListAdapter} used to provide data and Views * from some data to an expandable list view. * <p> * Adapters inheriting this class should verify that the base implementations of * {@link #getCombinedChildId(long, long)} and {@link #getCombinedGroupId(long)} * are correct in generating unique IDs from the group/children IDs. * <p> * @see SimpleExpandableListAdapter * @see SimpleCursorTreeAdapter */
public abstract class BaseExpandableListAdapter implements ExpandableListAdapter, HeterogeneousExpandableList { private final DataSetObservable mDataSetObservable = new DataSetObservable(); public void registerDataSetObserver(DataSetObserver observer) { mDataSetObservable.registerObserver(observer); } public void unregisterDataSetObserver(DataSetObserver observer) { mDataSetObservable.unregisterObserver(observer); }
See Also:
  • notifyInvalidated.notifyInvalidated()
/** * @see DataSetObservable#notifyInvalidated() */
public void notifyDataSetInvalidated() { mDataSetObservable.notifyInvalidated(); }
See Also:
  • notifyChanged.notifyChanged()
/** * @see DataSetObservable#notifyChanged() */
public void notifyDataSetChanged() { mDataSetObservable.notifyChanged(); } public boolean areAllItemsEnabled() { return true; } public void onGroupCollapsed(int groupPosition) { } public void onGroupExpanded(int groupPosition) { }
Override this method if you foresee a clash in IDs based on this scheme:

Base implementation returns a long:

  • bit 0: Whether this ID points to a child (unset) or group (set), so for this method this bit will be 1.
  • bit 1-31: Lower 31 bits of the groupId
  • bit 32-63: Lower 32 bits of the childId.

    {@inheritDoc}

  • /** * Override this method if you foresee a clash in IDs based on this scheme: * <p> * Base implementation returns a long: * <li> bit 0: Whether this ID points to a child (unset) or group (set), so for this method * this bit will be 1. * <li> bit 1-31: Lower 31 bits of the groupId * <li> bit 32-63: Lower 32 bits of the childId. * <p> * {@inheritDoc} */
    public long getCombinedChildId(long groupId, long childId) { return 0x8000000000000000L | ((groupId & 0x7FFFFFFF) << 32) | (childId & 0xFFFFFFFF); }
    Override this method if you foresee a clash in IDs based on this scheme:

    Base implementation returns a long:

  • bit 0: Whether this ID points to a child (unset) or group (set), so for this method this bit will be 0.
  • bit 1-31: Lower 31 bits of the groupId
  • bit 32-63: Lower 32 bits of the childId.

    {@inheritDoc}

  • /** * Override this method if you foresee a clash in IDs based on this scheme: * <p> * Base implementation returns a long: * <li> bit 0: Whether this ID points to a child (unset) or group (set), so for this method * this bit will be 0. * <li> bit 1-31: Lower 31 bits of the groupId * <li> bit 32-63: Lower 32 bits of the childId. * <p> * {@inheritDoc} */
    public long getCombinedGroupId(long groupId) { return (groupId & 0x7FFFFFFF) << 32; }
    {@inheritDoc}
    /** * {@inheritDoc} */
    public boolean isEmpty() { return getGroupCount() == 0; }
    {@inheritDoc}
    Returns:0 for any group or child position, since only one child type count is declared.
    /** * {@inheritDoc} * @return 0 for any group or child position, since only one child type count is declared. */
    public int getChildType(int groupPosition, int childPosition) { return 0; }
    {@inheritDoc}
    Returns:1 as a default value in BaseExpandableListAdapter.
    /** * {@inheritDoc} * @return 1 as a default value in BaseExpandableListAdapter. */
    public int getChildTypeCount() { return 1; }
    {@inheritDoc}
    Returns:0 for any groupPosition, since only one group type count is declared.
    /** * {@inheritDoc} * @return 0 for any groupPosition, since only one group type count is declared. */
    public int getGroupType(int groupPosition) { return 0; }
    {@inheritDoc}
    Returns:1 as a default value in BaseExpandableListAdapter.
    /** * {@inheritDoc} * @return 1 as a default value in BaseExpandableListAdapter. */
    public int getGroupTypeCount() { return 1; } }