Как обновить 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 о том, что набор данных изменился, и он должен обновить себя

Ответ 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);

который обновил мой список.