The reason I'm asking that is because requery()
is deprecated. What is the best way now to refresh your ListView
?
requery()
updates a Cursor
, not a CursorAdapter
. As you say, it has been deprecated, and its replacement is:
oldCursor = myCursorAdapter.swapCursor(newCursor); // hands you back oldCursor
or:
myCursorAdapter.changeCursor(newCursor); // automatically closes old Cursor
myCursorAdapter.notifyDataSetChanged()
notifies the ListView
that the data set has changed, and it should refresh itself
notifyDataSetChanged()
on CursorAdapter after either changeCursor()
or swapCursor()
calls - both methods call this method themselves, therefore your call will become just an overhead. –
Eau You can create a new cursor and call changeCursor()
(documentation here) on your CursorAdapter
instance or call notifyDataSetChanged()
(documentation here) on your adapter.
This is what works for me, im not sure its the best way.
c = db.rawQuery( "SELECT * FROM mytable", null); //same line of the first initialization
adapter.swapCursor(c);
I refresh the only cursor, I dont know what to do with a new one. Also i dont know pepole that answer with only a name of a function.
The only thing that helped me, was to initialise new cursor, similar as previous one like:
cursor = dbHelper.myDataBase.rawQuery(StaticValues.SQL_CAT, null);
newCursor = dbHelper.myDataBase.rawQuery(StaticValues.SQL_CAT, null);
and then call:
adapter.changeCursor(newCursor);
that updated my listview.
I tried to add my response as a comment but failed for some reason.
cursoradapter.notifyDatasetchanged() should not work as your adapter is linked to a "cursor" which holds a "query" that was executed before dataset was changed. Hence one would require to change "cursor" by doing the "new query" and link to cursoradapter using cursoradapter changecursor().
© 2022 - 2024 — McMap. All rights reserved.