Для заполнения списка с возможностью расширения с локальной базе данных SQLite


У меня есть база данных sqlite в моем приложении. Я хочу сделать расширяемое представление списка с этим.

Я фиксирован с подходом, который я должен принять для этого.

Много пытался найти учебник для того же, но не смог найти ни одного, где один заполняет расширяемый список с локальной базой данных.

Есть один учебник на сайте android, где они заполняют расширяемый список контактными данными в телефоне. Они делают это с самого начала. поставщик контента ExpandableList2.java

Итак, мой вопрос заключается в том, должен ли я также создать контент-провайдера для своей базы данных, которая находится внутри моего собственного приложения ?

Это единственный подход или есть какой-то другой, лучший?

3 9

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. Создайте класс DBHelper и создайте функции для извлечения записей из локальной базы данных без поставщика содержимого.
  2. Создайте класс модели для хранения записей из локальной базы данных.
  3. Используйте этот класс модели в качестве данных для адаптера списка.

Если у вас есть локальная база данных, лучше всего использовать CursorTreeAdapter, поскольку он автоматически обрабатывает обновление списка.

Проверьте этот пост моя помощь вам. ExpandableListView с использованием CursorTreeAdapter с in fragment, Content Provider, LoaderCallbacks и CursorLoader