How to update ListView in case of CursorAdapter usage?

后端 未结 6 842
北荒
北荒 2020-12-09 10:11

The reason I\'m asking that is because requery() is deprecated. What is the best way now to refresh your ListView?

相关标签:
6条回答
  • 2020-12-09 10:41

    Use BaseAdapter.notifyDataSetChanged().

    0 讨论(0)
  • 2020-12-09 10:42

    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.

    0 讨论(0)
  • 2020-12-09 10:45

    You can create a new cursor and call changeCursor() (documentation here) on your CursorAdapter instance or call notifyDataSetChanged() (documentation here) on your adapter.

    0 讨论(0)
  • 2020-12-09 10:46

    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

    0 讨论(0)
  • 2020-12-09 10:47

    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().

    0 讨论(0)
  • 2020-12-09 10:54

    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.

    0 讨论(0)
提交回复
热议问题