Как обновить CursorAdapter, привязанный к списку при изменении количества элементов? - PullRequest
6 голосов
/ 16 августа 2010

У меня есть ListView, поддерживаемый пользовательским адаптером на основе CursorAdapter.

Курсор, который я даю, основан на списке заметок в базе данных (каждая заметка является строкой БД).

Все работает отлично, пока я не удалю заметку из базы данных.Я не уверен, как правильно обновить курсор / адаптер / список для отображения новых данных.

Я прочитал конфликтующие сообщения об использовании adapter.notifyDataSetChanged() против cursor.requery() для обновления пользовательского интерфейса, но ни один изкажется, что они работают в этом случае.Единственный способ обновить его - создать новый курсор из нового запроса и вызвать adapter.changeCursor(newCursor).

Может ли кто-нибудь продемонстрировать правильный способ обновления данных поддержки, а затем пользовательского интерфейса (с помощьюpsuedocode, если это возможно).

Ответы [ 3 ]

9 голосов
/ 16 августа 2010

Вы должны requery, а затем notifyDataSetChanged.

1 голос
/ 16 августа 2010

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

0 голосов
/ 27 августа 2014

Это то, что работает для меня, я не уверен, что это лучший способ.

c = db.rawQuery( "SELECT * FROM mytable", null); //same line of the first initialization
adapter.swapCursor(c);

Я обновляю единственный курсор, я не знаю, что делать с новым. Также я не понимаю людей, которые отвечают с именем функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...