9

アプリケーションに sqlite データベースがあります。それを使って展開可能なリストビューを作りたいです。

私はそのために取るべきアプローチに固執しています。

同じチュートリアルを見つけるために多くのことを試みましたが、Expandable リストにローカル データベースを設定しているチュートリアルを 1 つも見つけることができませんでした。

Android サイトにこの 1 つのチュートリアルがあり、拡張可能なリストに電話の連絡先の詳細を入力しています。これは、コンテンツ プロバイダー ExpandableList2.javaから実行されます。

私の質問は、自分のアプリケーション内にあるデータベース用のコンテンツ プロバイダーも作成する必要があるかどうかです。

これが唯一のアプローチですか、それとも他にもっと良い方法がありますか?

4

3 に答える 3

3

expandablelistview とデータベースを試すプロジェクトを作成しました。

最終クラスExpAdapterはCursorTreeAdapterを拡張します{
        LayoutInflater mInflator;

        public ExpAdapter(カーソル カーソル、コンテキスト コンテキスト) {
            スーパー(カーソル、コンテキスト);
            mInflator = LayoutInflater.from(コンテキスト);
        }

        @オーバーライド
        protected void bindChildView(ビュー ビュー、コンテキスト コンテキスト、カーソル カーソル、
                boolean isLastChild) {
            TextView tvChild = (TextView) view.findViewById(android.R.id.text1);
            tvChild.setText(cursor.getString(cursor)
                    .getColumnIndex(DBHelper.COL_TABLE_CHILD_NAME)));
        }

        @オーバーライド
        protected void bindGroupView(ビュー ビュー、コンテキスト コンテキスト、カーソル カーソル、
                boolean isExpanded) {
            TextView tvGrp = (TextView) view.findViewById(android.R.id.text1);
            tvGrp.setText(cursor.getString(cursor
                    .getColumnIndex(DBHelper.COL_TABLE_MAIN_NAME)));
        }

        @オーバーライド
        保護されたカーソル getChildrenCursor(カーソル グループカーソル) {
            int groupId = groupCursor.getInt(groupCursor
                    .getColumnIndex(DBHelper.COL_ID));
            aDBHelper.getChildCursor(groupId) を返します。
        }

        @オーバーライド
        protected View newChildView(コンテキスト コンテキスト、カーソル カーソル、
                boolean isLastChild, ViewGroup 親) {
            ビュー mView = mInflator.inflate(
                    android.R.layout.simple_expandable_list_item_1, null);
            TextView tvChild = (TextView) mView
                    .findViewById(android.R.id.text1);
            tvChild.setText(cursor.getString(cursor)
                    .getColumnIndex(DBHelper.COL_TABLE_CHILD_NAME)));
            mView を返します。
        }

        @オーバーライド
        protected View newGroupView(コンテキスト コンテキスト、カーソル カーソル、
                boolean isExpanded, ViewGroup 親) {
            ビュー mView = mInflator.inflate(
                    android.R.layout.simple_expandable_list_item_1, null);
            TextView tvGrp = (TextView) mView.findViewById(android.R.id.text1);
            tvGrp.setText(cursor.getString(cursor
                    .getColumnIndex(DBHelper.COL_TABLE_MAIN_NAME)));
            mView を返します。
        }

    }
于 2011-07-21T06:58:39.450 に答える
2

そのためのコンテンツ プロバイダーを作成する必要はありません。

  1. DBHelper クラスを作成し、コンテンツ プロバイダーなしでローカル データベースからレコードを取得するための関数を作成します。
  2. ローカル データベースのレコードを保持するためのモデル クラスを作成します。
  3. リスト アダプターのデータとして、このモデル クラスを使用します。
于 2014-09-19T11:18:32.957 に答える
0

ローカル データベースがある場合、リストの更新を自動的に処理するため、CursorTreeAdapter を使用するのが最善の方法です。

この投稿を確認してください。 フラグメント、コンテンツ プロバイダー、LoaderCallbacks、および CursorLoader で CursorTreeAdapter を使用する ExpandableListView

于 2014-09-20T05:02:18.760 に答える