19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 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.content.Context; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.LayoutInflater; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Map; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An easy adapter to map static data to group and child views defined in an XML 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * file. You can separately specify the data backing the group as a List of 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Maps. Each entry in the ArrayList corresponds to one group in the expandable 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * list. The Maps contain the data for each row. You also specify an XML file 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that defines the views used to display a group, and a mapping from keys in 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Map to specific views. This process is similar for a child, except it is 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one-level deeper so the data backing is specified as a List<List<Map>>, 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * where the first List corresponds to the group of the child, the second List 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * corresponds to the position of the child within the group, and finally the 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Map holds the data for that particular child. 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class SimpleExpandableListAdapter extends BaseExpandableListAdapter { 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private List<? extends Map<String, ?>> mGroupData; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mExpandedGroupLayout; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mCollapsedGroupLayout; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String[] mGroupFrom; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int[] mGroupTo; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private List<? extends List<? extends Map<String, ?>>> mChildData; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mChildLayout; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mLastChildLayout; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String[] mChildFrom; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int[] mChildTo; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private LayoutInflater mInflater; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The context where the {@link ExpandableListView} 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with this {@link SimpleExpandableListAdapter} is 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param groupData A List of Maps. Each entry in the List corresponds to 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one group in the list. The Maps contain the data for each 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * group, and should include all the entries specified in 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "groupFrom" 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param groupFrom A list of keys that will be fetched from the Map 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with each group. 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param groupTo The group views that should display column in the 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "groupFrom" parameter. These should all be TextViews. The 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first N views in this list are given the values of the first N 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * columns in the groupFrom parameter. 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param groupLayout resource identifier of a view layout that defines the 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * views for a group. The layout file should include at least 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * those named views defined in "groupTo" 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childData A List of List of Maps. Each entry in the outer List 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * corresponds to a group (index by group position), each entry 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the inner List corresponds to a child within the group 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (index by child position), and the Map corresponds to the data 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for a child (index by values in the childFrom array). The Map 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contains the data for each child, and should include all the 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * entries specified in "childFrom" 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childFrom A list of keys that will be fetched from the Map 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with each child. 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childTo The child views that should display column in the 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "childFrom" parameter. These should all be TextViews. The 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first N views in this list are given the values of the first N 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * columns in the childFrom parameter. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childLayout resource identifier of a view layout that defines the 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * views for a child. The layout file should include at least 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * those named views defined in "childTo" 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SimpleExpandableListAdapter(Context context, 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<? extends Map<String, ?>> groupData, int groupLayout, 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] groupFrom, int[] groupTo, 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<? extends List<? extends Map<String, ?>>> childData, 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int childLayout, String[] childFrom, int[] childTo) { 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, groupData, groupLayout, groupLayout, groupFrom, groupTo, childData, 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project childLayout, childLayout, childFrom, childTo); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The context where the {@link ExpandableListView} 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with this {@link SimpleExpandableListAdapter} is 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param groupData A List of Maps. Each entry in the List corresponds to 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one group in the list. The Maps contain the data for each 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * group, and should include all the entries specified in 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "groupFrom" 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param groupFrom A list of keys that will be fetched from the Map 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with each group. 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param groupTo The group views that should display column in the 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "groupFrom" parameter. These should all be TextViews. The 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first N views in this list are given the values of the first N 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * columns in the groupFrom parameter. 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param expandedGroupLayout resource identifier of a view layout that 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * defines the views for an expanded group. The layout file 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should include at least those named views defined in "groupTo" 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param collapsedGroupLayout resource identifier of a view layout that 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * defines the views for a collapsed group. The layout file 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should include at least those named views defined in "groupTo" 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childData A List of List of Maps. Each entry in the outer List 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * corresponds to a group (index by group position), each entry 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the inner List corresponds to a child within the group 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (index by child position), and the Map corresponds to the data 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for a child (index by values in the childFrom array). The Map 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contains the data for each child, and should include all the 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * entries specified in "childFrom" 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childFrom A list of keys that will be fetched from the Map 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with each child. 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childTo The child views that should display column in the 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "childFrom" parameter. These should all be TextViews. The 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first N views in this list are given the values of the first N 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * columns in the childFrom parameter. 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childLayout resource identifier of a view layout that defines the 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * views for a child. The layout file should include at least 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * those named views defined in "childTo" 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SimpleExpandableListAdapter(Context context, 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<? extends Map<String, ?>> groupData, int expandedGroupLayout, 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int collapsedGroupLayout, String[] groupFrom, int[] groupTo, 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<? extends List<? extends Map<String, ?>>> childData, 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int childLayout, String[] childFrom, int[] childTo) { 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, groupData, expandedGroupLayout, collapsedGroupLayout, 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project groupFrom, groupTo, childData, childLayout, childLayout, 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project childFrom, childTo); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The context where the {@link ExpandableListView} 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with this {@link SimpleExpandableListAdapter} is 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param groupData A List of Maps. Each entry in the List corresponds to 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one group in the list. The Maps contain the data for each 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * group, and should include all the entries specified in 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "groupFrom" 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param groupFrom A list of keys that will be fetched from the Map 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with each group. 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param groupTo The group views that should display column in the 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "groupFrom" parameter. These should all be TextViews. The 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first N views in this list are given the values of the first N 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * columns in the groupFrom parameter. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param expandedGroupLayout resource identifier of a view layout that 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * defines the views for an expanded group. The layout file 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should include at least those named views defined in "groupTo" 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param collapsedGroupLayout resource identifier of a view layout that 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * defines the views for a collapsed group. The layout file 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should include at least those named views defined in "groupTo" 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childData A List of List of Maps. Each entry in the outer List 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * corresponds to a group (index by group position), each entry 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the inner List corresponds to a child within the group 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (index by child position), and the Map corresponds to the data 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for a child (index by values in the childFrom array). The Map 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contains the data for each child, and should include all the 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * entries specified in "childFrom" 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childFrom A list of keys that will be fetched from the Map 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with each child. 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childTo The child views that should display column in the 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "childFrom" parameter. These should all be TextViews. The 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first N views in this list are given the values of the first N 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * columns in the childFrom parameter. 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param childLayout resource identifier of a view layout that defines the 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * views for a child (unless it is the last child within a group, 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in which case the lastChildLayout is used). The layout file 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should include at least those named views defined in "childTo" 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param lastChildLayout resource identifier of a view layout that defines 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the views for the last child within each group. The layout 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * file should include at least those named views defined in 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "childTo" 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SimpleExpandableListAdapter(Context context, 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<? extends Map<String, ?>> groupData, int expandedGroupLayout, 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int collapsedGroupLayout, String[] groupFrom, int[] groupTo, 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<? extends List<? extends Map<String, ?>>> childData, 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int childLayout, int lastChildLayout, String[] childFrom, 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] childTo) { 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mGroupData = groupData; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mExpandedGroupLayout = expandedGroupLayout; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCollapsedGroupLayout = collapsedGroupLayout; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mGroupFrom = groupFrom; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mGroupTo = groupTo; 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mChildData = childData; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mChildLayout = childLayout; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLastChildLayout = lastChildLayout; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mChildFrom = childFrom; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mChildTo = childTo; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object getChild(int groupPosition, int childPosition) { 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mChildData.get(groupPosition).get(childPosition); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getChildId(int groupPosition, int childPosition) { 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return childPosition; 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View getChildView(int groupPosition, int childPosition, boolean isLastChild, 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View convertView, ViewGroup parent) { 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View v; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (convertView == null) { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v = newChildView(isLastChild, parent); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v = convertView; 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bindView(v, mChildData.get(groupPosition).get(childPosition), mChildFrom, mChildTo); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return v; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new View for a child. 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isLastChild Whether the child is the last child within its group. 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param parent The eventual parent of this new View. 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A new child View 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View newChildView(boolean isLastChild, ViewGroup parent) { 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mInflater.inflate((isLastChild) ? mLastChildLayout : mChildLayout, parent, false); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void bindView(View view, Map<String, ?> data, String[] from, int[] to) { 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int len = to.length; 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < len; i++) { 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextView v = (TextView)view.findViewById(to[i]); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (v != null) { 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v.setText((String)data.get(from[i])); 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getChildrenCount(int groupPosition) { 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mChildData.get(groupPosition).size(); 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object getGroup(int groupPosition) { 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mGroupData.get(groupPosition); 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getGroupCount() { 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mGroupData.size(); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getGroupId(int groupPosition) { 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return groupPosition; 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View getGroupView(int groupPosition, boolean isExpanded, View convertView, 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ViewGroup parent) { 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View v; 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (convertView == null) { 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v = newGroupView(isExpanded, parent); 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v = convertView; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bindView(v, mGroupData.get(groupPosition), mGroupFrom, mGroupTo); 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return v; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new View for a group. 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isExpanded Whether the group is currently expanded. 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param parent The eventual parent of this new View. 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A new group View 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View newGroupView(boolean isExpanded, ViewGroup parent) { 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mInflater.inflate((isExpanded) ? mExpandedGroupLayout : mCollapsedGroupLayout, 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parent, false); 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isChildSelectable(int groupPosition, int childPosition) { 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hasStableIds() { 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 302