Обновление Android ListView с помощью SimpleCursorAdapter

Эй, я использую список для демонстрации записей, которые хранятся в базе данных. У меня также есть элемент EditText и кнопка, которая добавляет содержимое EditText в базу данных. Чтобы связать представление с содержимым базы данных, я использую SimpleCursorAdapter и следующую функцию заполнения:

private void populate() {
    cursor = dbAdapter.getAllItems();
    startManagingCursor(cursor);

    String[] from = new String[] { DBAdapter.KEY_TASK };
    int[] to = new int[] { android.R.id.text1 };

    // Now create an array adapter and set it to display using our row
    cursorAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to);
    list.setAdapter(cursorAdapter);
}

Если я добавил новую запись, нажав на кнопку, я хочу обновить список, но это работает только с функцией заполнения, а не с общей функцией адаптера. notifyDataSetChanged();, У меня есть ошибка или это правильный способ обновления списка?

3 ответа

Решение

Вы видели это, пробовали метод курсора подкачки или просто снова вызывали setAdapter()?

У меня была похожая проблема, когда я не мог обновить свой список, и я просто создал метод refreshListView(). Теперь вы можете вызывать это изначально из onCreate() И каждый раз, когда пользователь добавляет что-то в БД. Все, что он делает, это повторно привязывает просмотр списка к курсору. Со всеми устаревшими методами (query ()) и проблемами с notifyDataSetChanged () я решил, что это самый простой способ.

Пожалуйста, обратитесь по этой ссылке... это работает как шарм

Обновите SimpleCursorAdapter, сохраняя положение прокрутки в ListView

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

adapter.changecursor(newcursorValue);
adapter.notifydatasetChanged();
 lsMedicine1.setSelectionFromTop(lsMedicine1.getLastVisiblePosition()-20, 0);

Вам нужно позвонить swapcursor() до notifyDataSetChanged() на адаптере.

Другие вопросы по тегам