使用本地SQlite数据库填充可扩展列表视图的方法

时间:2011-07-20 11:09:06

标签: android sqlite expandablelistview android-contentprovider simplecursoradapter

我的应用程序中有一个sqlite数据库。我想用它做一个可扩展的列表视图。

我已经采取了我应采取的方法。

尝试了很多相同的教程,却找不到一个教程,其中一个用本地数据库填充Expandable列表。

在Android网站上有一个教程,他们用手机中的联系人详细信息填充可扩展列表。他们是通过内容提供商执行此操作的 ExpandableList2.java

所以我的问题是我是否应该为我自己的应用程序内的数据库创建内容提供程序?

这是唯一的方法还是还有其他更好的方法?

3 个答案:

答案 0 :(得分:3)

我创建了一个项目来试用expandablelistview和数据库,希望这有帮助

 final class ExpAdapter extends CursorTreeAdapter {
        LayoutInflater mInflator;

        public ExpAdapter(Cursor cursor, Context context) {
            super(cursor, context);
            mInflator = LayoutInflater.from(context);
        }

        @Override
        protected void bindChildView(View view, Context context, Cursor cursor,
                boolean isLastChild) {
            TextView tvChild = (TextView) view.findViewById(android.R.id.text1);
            tvChild.setText(cursor.getString(cursor
                    .getColumnIndex(DBHelper.COL_TABLE_CHILD_NAME)));
        }

        @Override
        protected void bindGroupView(View view, Context context, Cursor cursor,
                boolean isExpanded) {
            TextView tvGrp = (TextView) view.findViewById(android.R.id.text1);
            tvGrp.setText(cursor.getString(cursor
                    .getColumnIndex(DBHelper.COL_TABLE_MAIN_NAME)));
        }

        @Override
        protected Cursor getChildrenCursor(Cursor groupCursor) {
            int groupId = groupCursor.getInt(groupCursor
                    .getColumnIndex(DBHelper.COL_ID));
            return aDBHelper.getChildCursor(groupId);
        }

        @Override
        protected View newChildView(Context context, Cursor cursor,
                boolean isLastChild, ViewGroup parent) {
            View 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)));
            return mView;
        }

        @Override
        protected View newGroupView(Context context, Cursor cursor,
                boolean isExpanded, ViewGroup parent) {
            View 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)));
            return mView;
        }

    }

答案 1 :(得分:2)

您不必为此创建内容提供商。

  1. 创建DBHelper类并创建函数,以便在没有内容提供者的情况下从本地数据库中获取记录。
  2. 创建一个模型类,用于保存本地数据库中的记录。
  3. 使用此模型类作为列表适配器的数据。

答案 2 :(得分:0)

如果你有本地数据库,最好的方法是使用CursorTreeAdapter,因为它会自动处理更新列表。

查看此帖子我的帮助。 ExpandableListView using CursorTreeAdapter with in fragment, Content Provider, LoaderCallbacks and CursorLoader