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