Для заполнения списка с возможностью расширения с локальной базе данных SQLite
У меня есть база данных sqlite в моем приложении. Я хочу сделать расширяемое представление списка с этим.
Я фиксирован с подходом, который я должен принять для этого.
Много пытался найти учебник для того же, но не смог найти ни одного, где один заполняет расширяемый список с локальной базой данных.
Есть один учебник на сайте android, где они заполняют расширяемый список контактными данными в телефоне. Они делают это с самого начала. поставщик контента ExpandableList2.java
Итак, мой вопрос заключается в том, должен ли я также создать контент-провайдера для своей базы данных, которая находится внутри моего собственного приложения ?
Это единственный подход или есть какой-то другой, лучший?
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; } }
Для этого не нужно создавать контент-провайдера.
- Создайте класс DBHelper и создайте функции для извлечения записей из локальной базы данных без поставщика содержимого.
- Создайте класс модели для хранения записей из локальной базы данных.
- Используйте этот класс модели в качестве данных для адаптера списка.
Если у вас есть локальная база данных, лучше всего использовать CursorTreeAdapter, поскольку он автоматически обрабатывает обновление списка.
Проверьте этот пост моя помощь вам. ExpandableListView с использованием CursorTreeAdapter с in fragment, Content Provider, LoaderCallbacks и CursorLoader