1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.widget;
18 
19 import android.view.View;
20 import android.view.ViewGroup;
21 
22 /**
23  * Additional methods that when implemented make an
24  * {@link ExpandableListAdapter} take advantage of the {@link Adapter} view type
25  * mechanism.
26  * <p>
27  * An {@link ExpandableListAdapter} declares it has one view type for its group items
28  * and one view type for its child items. Although adapted for most {@link ExpandableListView}s,
29  * these values should be tuned for heterogeneous {@link ExpandableListView}s.
30  * </p>
31  * Lists that contain different types of group and/or child item views, should use an adapter that
32  * implements this interface. This way, the recycled views that will be provided to
33  * {@link android.widget.ExpandableListAdapter#getGroupView(int, boolean, View, ViewGroup)}
34  * and
35  * {@link android.widget.ExpandableListAdapter#getChildView(int, int, boolean, View, ViewGroup)}
36  * will be of the appropriate group or child type, resulting in a more efficient reuse of the
37  * previously created views.
38  */
39 public interface HeterogeneousExpandableList {
40     /**
41      * Get the type of group View that will be created by
42      * {@link android.widget.ExpandableListAdapter#getGroupView(int, boolean, View, ViewGroup)}
43      * . for the specified group item.
44      *
45      * @param groupPosition the position of the group for which the type should be returned.
46      * @return An integer representing the type of group View. Two group views should share the same
47      *         type if one can be converted to the other in
48      *         {@link android.widget.ExpandableListAdapter#getGroupView(int, boolean, View, ViewGroup)}
49      *         . Note: Integers must be in the range 0 to {@link #getGroupTypeCount} - 1.
50      *         {@link android.widget.Adapter#IGNORE_ITEM_VIEW_TYPE} can also be returned.
51      * @see android.widget.Adapter#IGNORE_ITEM_VIEW_TYPE
52      * @see #getGroupTypeCount()
53      */
getGroupType(int groupPosition)54     int getGroupType(int groupPosition);
55 
56     /**
57      * Get the type of child View that will be created by
58      * {@link android.widget.ExpandableListAdapter#getChildView(int, int, boolean, View, ViewGroup)}
59      * for the specified child item.
60      *
61      * @param groupPosition the position of the group that the child resides in
62      * @param childPosition the position of the child with respect to other children in the group
63      * @return An integer representing the type of child View. Two child views should share the same
64      *         type if one can be converted to the other in
65      *         {@link android.widget.ExpandableListAdapter#getChildView(int, int, boolean, View, ViewGroup)}
66      *         Note: Integers must be in the range 0 to {@link #getChildTypeCount} - 1.
67      *         {@link android.widget.Adapter#IGNORE_ITEM_VIEW_TYPE} can also be returned.
68      * @see android.widget.Adapter#IGNORE_ITEM_VIEW_TYPE
69      * @see #getChildTypeCount()
70      */
getChildType(int groupPosition, int childPosition)71     int getChildType(int groupPosition, int childPosition);
72 
73     /**
74      * <p>
75      * Returns the number of types of group Views that will be created by
76      * {@link android.widget.ExpandableListAdapter#getGroupView(int, boolean, View, ViewGroup)}
77      * . Each type represents a set of views that can be converted in
78      * {@link android.widget.ExpandableListAdapter#getGroupView(int, boolean, View, ViewGroup)}
79      * . If the adapter always returns the same type of View for all group items, this method should
80      * return 1.
81      * </p>
82      * This method will only be called when the adapter is set on the {@link AdapterView}.
83      *
84      * @return The number of types of group Views that will be created by this adapter.
85      * @see #getChildTypeCount()
86      * @see #getGroupType(int)
87      */
getGroupTypeCount()88     int getGroupTypeCount();
89 
90     /**
91      * <p>
92      * Returns the number of types of child Views that will be created by
93      * {@link android.widget.ExpandableListAdapter#getChildView(int, int, boolean, View, ViewGroup)}
94      * . Each type represents a set of views that can be converted in
95      * {@link android.widget.ExpandableListAdapter#getChildView(int, int, boolean, View, ViewGroup)}
96      * , for any group. If the adapter always returns the same type of View for
97      * all child items, this method should return 1.
98      * </p>
99      * This method will only be called when the adapter is set on the {@link AdapterView}.
100      *
101      * @return The total number of types of child Views that will be created by this adapter.
102      * @see #getGroupTypeCount()
103      * @see #getChildType(int, int)
104      */
getChildTypeCount()105     int getChildTypeCount();
106 }
107