BaseExpandableListAdapter.java revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.widget; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.DataSetObservable; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.DataSetObserver; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Base class for a {@link ExpandableListAdapter} used to provide data and Views 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from some data to an expandable list view. 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Adapters inheriting this class should verify that the base implementations of 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getCombinedChildId(long, long)} and {@link #getCombinedGroupId(long)} 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are correct in generating unique IDs from the group/children IDs. 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see SimpleExpandableListAdapter 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see SimpleCursorTreeAdapter 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class BaseExpandableListAdapter implements ExpandableListAdapter { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final DataSetObservable mDataSetObservable = new DataSetObservable(); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void registerDataSetObserver(DataSetObserver observer) { 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDataSetObservable.registerObserver(observer); 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void unregisterDataSetObserver(DataSetObserver observer) { 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDataSetObservable.unregisterObserver(observer); 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@see DataSetObservable#notifyInvalidated()} 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void notifyDataSetInvalidated() { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDataSetObservable.notifyInvalidated(); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@see DataSetObservable#notifyChanged()} 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void notifyDataSetChanged() { 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDataSetObservable.notifyChanged(); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean areAllItemsEnabled() { 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onGroupCollapsed(int groupPosition) { 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onGroupExpanded(int groupPosition) { 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Override this method if you foresee a clash in IDs based on this scheme: 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Base implementation returns a long: 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> bit 0: Whether this ID points to a child (unset) or group (set), so for this method 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this bit will be 1. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> bit 1-31: Lower 31 bits of the groupId 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> bit 32-63: Lower 32 bits of the childId. 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getCombinedChildId(long groupId, long childId) { 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0x8000000000000000L | ((groupId & 0x7FFFFFFF) << 32) | (childId & 0xFFFFFFFF); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Override this method if you foresee a clash in IDs based on this scheme: 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Base implementation returns a long: 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> bit 0: Whether this ID points to a child (unset) or group (set), so for this method 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this bit will be 0. 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> bit 1-31: Lower 31 bits of the groupId 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> bit 32-63: Lower 32 bits of the childId. 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getCombinedGroupId(long groupId) { 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (groupId & 0x7FFFFFFF) << 32; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isEmpty() { 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getGroupCount() == 0; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 107