从SQLiteCursorLoader刷新光标

时间:2013-05-29 22:10:08

标签: android sqlite android-4.0-ice-cream-sandwich sqliteopenhelper

我的项目使用SQLiteCursorLoader library from commonsguy将数据从数据库加载到ListView中。其中的数据是一个简单的布尔值(就SQLite支持布尔值而言......也就是说,只有0或1的数字)告诉复选框的状态。如果我更改列表中复选框的状态,然后滚动列表中的项目,则列表项将返回到传入游标时的状态,尽管底层数据库已更改。如果我更改了一堆复选框的状态,然后激活列表MultiChoiceMode,则显示的所有项目将恢复到光标最初传入时的状态,尽管事实是底层数据库已经改变。

有没有办法刷新光标? Cursor.requery()已被弃用,每次选中复选框时,我都不想创建新的Cursor,这种情况会发生很多。我还不确定如何在性能方面多次调用restartLoader(),尤其是因为我使用onLoadFinish()来执行某些动画。

1 个答案:

答案 0 :(得分:0)

  

有没有办法刷新光标?

致电restartLoader()让它重新加载数据。

  

我不希望每次选中复选框时都要创建一个新的Cursor,这种情况很多发生

正确使用,ListView为您维护已检查状态。您可以通过实施android:choiceMode="multipleChoice"的{​​{1}}和行Views执行此操作。目标是在用户表明他们通过一种或另一种方式(例如,“保存”操作栏项目)完成了检查清单之前不修改数据库。

  

我也不确定如何多次调用restartLoader(),性能方面,特别是因为我使用onLoadFinish()来执行一些动画。

不要多次打电话。理想情况下,通过不更新数据库直到用户完成调用它为零,此时您可能正在转换到UI的其他部分。或者,每个请求的数据库I / O只调用一次(例如,在单击“保存”时)。或者,从使用Checkable切换到其他内容,例如从CursorAdapter填充的一组POJO上的ArrayAdapter,以便内存中的表示形式除了可以修改单独坚持。