/* * 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 {@link 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 * {@link #getCombinedChildId(long, long)} and {@link #getCombinedGroupId(long)} * are correct in generating unique IDs from the group/children IDs. *

* @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 DataSetObservable#notifyInvalidated() */ public void notifyDataSetInvalidated() { mDataSetObservable.notifyInvalidated(); } /** * @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} */ 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} */ public long getCombinedGroupId(long groupId) { return (groupId & 0x7FFFFFFF) << 32; } /** * {@inheritDoc} */ public boolean isEmpty() { return getGroupCount() == 0; } /** * {@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} * @return 1 as a default value in BaseExpandableListAdapter. */ public int getChildTypeCount() { return 1; } /** * {@inheritDoc} * @return 0 for any groupPosition, since only one group type count is declared. */ public int getGroupType(int groupPosition) { return 0; } /** * {@inheritDoc} * @return 1 as a default value in BaseExpandableListAdapter. */ public int getGroupTypeCount() { return 1; } }