SimpleCursorTreeAdapter.java revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
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.database.Cursor;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An easy adapter to map columns from a cursor to TextViews or ImageViews
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * defined in an XML file. You can specify which columns you want, which views
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you want to display the columns, and the XML file that defines the appearance
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of these views. Separate XML files for child and groups are possible.
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TextViews bind the values to their text property (see
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link TextView#setText(CharSequence)}). ImageViews bind the values to their
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * image's Uri property (see {@link ImageView#setImageURI(android.net.Uri)}).
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class SimpleCursorTreeAdapter extends ResourceCursorTreeAdapter {
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** The indices of columns that contain data to display for a group. */
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int[] mGroupFrom;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The View IDs that will display a group's data fetched from the
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * corresponding column.
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int[] mGroupTo;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** The indices of columns that contain data to display for a child. */
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int[] mChildFrom;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The View IDs that will display a child's data fetched from the
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * corresponding column.
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int[] mChildTo;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Constructor.
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param context The context where the {@link ExpandableListView}
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            associated with this {@link SimpleCursorTreeAdapter} is
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            running
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param cursor The database cursor
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param collapsedGroupLayout The resource identifier of a layout file that
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            defines the views for a collapsed group. The layout file
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            should include at least those named views defined in groupTo.
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param expandedGroupLayout The resource identifier of a layout file that
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            defines the views for an expanded group. The layout file
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            should include at least those named views defined in groupTo.
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param groupFrom A list of column names that will be used to display the
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            data for a group.
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param groupTo The group views (from the group layouts) that should
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            display column in the "from" parameter. These should all be
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            TextViews or ImageViews. The first N views in this list are
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            given the values of the first N columns in the from parameter.
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param childLayout The resource identifier of a layout file that defines
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the views for a child (except the last). The layout file
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            should include at least those named views defined in childTo.
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param lastChildLayout The resource identifier of a layout file that
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            defines the views for the last child within a group. The
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            layout file should include at least those named views defined
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            in childTo.
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param childFrom A list of column names that will be used to display the
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            data for a child.
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param childTo The child views (from the child layouts) that should
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            display column in the "from" parameter. These should all be
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            TextViews or ImageViews. The first N views in this list are
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            given the values of the first N columns in the from parameter.
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public SimpleCursorTreeAdapter(Context context, Cursor cursor, int collapsedGroupLayout,
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int expandedGroupLayout, String[] groupFrom, int[] groupTo, int childLayout,
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int lastChildLayout, String[] childFrom, int[] childTo) {
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(context, cursor, collapsedGroupLayout, expandedGroupLayout, childLayout,
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                lastChildLayout);
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        init(groupFrom, groupTo, childFrom, childTo);
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Constructor.
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param context The context where the {@link ExpandableListView}
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            associated with this {@link SimpleCursorTreeAdapter} is
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            running
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param cursor The database cursor
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param collapsedGroupLayout The resource identifier of a layout file that
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            defines the views for a collapsed group. The layout file
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            should include at least those named views defined in groupTo.
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param expandedGroupLayout The resource identifier of a layout file that
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            defines the views for an expanded group. The layout file
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            should include at least those named views defined in groupTo.
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param groupFrom A list of column names that will be used to display the
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            data for a group.
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param groupTo The group views (from the group layouts) that should
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            display column in the "from" parameter. These should all be
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            TextViews or ImageViews. The first N views in this list are
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            given the values of the first N columns in the from parameter.
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param childLayout The resource identifier of a layout file that defines
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the views for a child. The layout file
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            should include at least those named views defined in childTo.
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param childFrom A list of column names that will be used to display the
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            data for a child.
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param childTo The child views (from the child layouts) that should
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            display column in the "from" parameter. These should all be
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            TextViews or ImageViews. The first N views in this list are
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            given the values of the first N columns in the from parameter.
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public SimpleCursorTreeAdapter(Context context, Cursor cursor, int collapsedGroupLayout,
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int expandedGroupLayout, String[] groupFrom, int[] groupTo,
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int childLayout, String[] childFrom, int[] childTo) {
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(context, cursor, collapsedGroupLayout, expandedGroupLayout, childLayout);
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        init(groupFrom, groupTo, childFrom, childTo);
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Constructor.
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param context The context where the {@link ExpandableListView}
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            associated with this {@link SimpleCursorTreeAdapter} is
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            running
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param cursor The database cursor
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param groupLayout The resource identifier of a layout file that defines
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the views for a group. The layout file should include at least
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            those named views defined in groupTo.
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param groupFrom A list of column names that will be used to display the
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            data for a group.
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param groupTo The group views (from the group layouts) that should
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            display column in the "from" parameter. These should all be
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            TextViews or ImageViews. The first N views in this list are
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            given the values of the first N columns in the from parameter.
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param childLayout The resource identifier of a layout file that defines
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the views for a child. The layout file should include at least
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            those named views defined in childTo.
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param childFrom A list of column names that will be used to display the
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            data for a child.
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param childTo The child views (from the child layouts) that should
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            display column in the "from" parameter. These should all be
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            TextViews or ImageViews. The first N views in this list are
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            given the values of the first N columns in the from parameter.
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public SimpleCursorTreeAdapter(Context context, Cursor cursor, int groupLayout,
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String[] groupFrom, int[] groupTo, int childLayout, String[] childFrom,
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int[] childTo) {
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(context, cursor, groupLayout, childLayout);
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        init(groupFrom, groupTo, childFrom, childTo);
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void init(String[] groupFromNames, int[] groupTo, String[] childFromNames,
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int[] childTo) {
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mGroupTo = groupTo;
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mChildTo = childTo;
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Get the group cursor column indices, the child cursor column indices will come
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // when needed
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        initGroupFromColumns(groupFromNames);
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Get a temporary child cursor to init the column indices
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (getGroupCount() > 0) {
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            MyCursorHelper tmpCursorHelper = getChildrenCursorHelper(0, true);
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (tmpCursorHelper != null) {
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                initChildrenFromColumns(childFromNames, tmpCursorHelper.getCursor());
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                deactivateChildrenCursorHelper(0);
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void initFromColumns(Cursor cursor, String[] fromColumnNames, int[] fromColumns) {
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = fromColumnNames.length - 1; i >= 0; i--) {
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            fromColumns[i] = cursor.getColumnIndexOrThrow(fromColumnNames[i]);
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void initGroupFromColumns(String[] groupFromNames) {
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mGroupFrom = new int[groupFromNames.length];
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        initFromColumns(mGroupCursorHelper.getCursor(), groupFromNames, mGroupFrom);
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void initChildrenFromColumns(String[] childFromNames, Cursor childCursor) {
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mChildFrom = new int[childFromNames.length];
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        initFromColumns(childCursor, childFromNames, mChildFrom);
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void bindView(View view, Context context, Cursor cursor, int[] from, int[] to) {
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0; i < to.length; i++) {
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            View v = view.findViewById(to[i]);
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (v != null) {
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                String text = cursor.getString(from[i]);
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (text == null) {
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    text = "";
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (v instanceof TextView) {
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    ((TextView) v).setText(text);
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else if (v instanceof ImageView) {
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    setViewImage((ImageView) v, text);
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else {
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    throw new IllegalStateException("SimpleCursorAdapter can bind values only to" +
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            " TextView and ImageView!");
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void bindChildView(View view, Context context, Cursor cursor, boolean isLastChild) {
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        bindView(view, context, cursor, mChildFrom, mChildTo);
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void bindGroupView(View view, Context context, Cursor cursor, boolean isExpanded) {
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        bindView(view, context, cursor, mGroupFrom, mGroupTo);
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Called by bindView() to set the image for an ImageView. By default, the
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * value will be treated as a Uri. Intended to be overridden by Adapters
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that need to filter strings retrieved from the database.
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param v ImageView to receive an image
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param value the value retrieved from the cursor
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void setViewImage(ImageView v, String value) {
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            v.setImageResource(Integer.parseInt(value));
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (NumberFormatException nfe) {
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            v.setImageURI(Uri.parse(value));
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
242