Как обновить ListView в случае использования CursorAdapter?
Причина, по которой я спрашиваю об этом, заключается в том, что requery()
устарел. Каков наилучший способ обновить ваш ListView
?
Ответы
Ответ 1
requery()
обновляет a Cursor
, а не CursorAdapter
. Как вы говорите, он устарел, и его замена:
oldCursor = myCursorAdapter.swapCursor(newCursor); // hands you back oldCursor
или
myCursorAdapter.changeCursor(newCursor); // automatically closes old Cursor
myCursorAdapter.notifyDataSetChanged()
уведомляет ListView
о том, что набор данных изменился, и он должен обновить себя
Ответ 2
Используйте BaseAdapter.notifyDataSetChanged().
Ответ 3
Вы можете создать новый курсор и вызвать changeCursor()
(документация здесь) на вашем экземпляре CursorAdapter
или называть notifyDataSetChanged()
(документация здесь) на вашем адаптере.
Ответ 4
Это то, что работает для меня, я не уверен, что это лучший способ.
c = db.rawQuery( "SELECT * FROM mytable", null); //same line of the first initialization
adapter.swapCursor(c);
Я обновляю единственный курсор, я не знаю, что делать с новым.
Также я не знаю pepole, отвечаю только с именем функции.
Ответ 5
Единственное, что помогло мне, - это инициализировать новый курсор, похожий на предыдущий:
cursor = dbHelper.myDataBase.rawQuery(StaticValues.SQL_CAT, null);
newCursor = dbHelper.myDataBase.rawQuery(StaticValues.SQL_CAT, null);
а затем вызовите:
adapter.changeCursor(newCursor);
который обновил мой список.