我有一个代表待办事项列表的 SQLite 表。每行都有一个_id
、title
和一个completed
标志。我有一个ListView
,其中每一行都有标题和一个映射到completed
标志的复选框。而且我有一个自定义CursorAdapter
设置复选框状态bindView
。复选框有一个OnClick
回调,当它被切换时更新数据库状态。
问题是当一个项目被滚动并返回屏幕时复选框会丢失状态,因为视图是从过时的光标数据重建的。
我知道这里的首选解决方案是每次数据更改时转储并重新获取游标。这让我觉得非常低效。当一个复选框被切换时,实际上我的结果集中有一点数据发生了变化。扔掉整个光标感觉有点矫枉过正。
我尝试过的另一种方法是缓存completed
标志,在切换项目时更新数据库和缓存,然后在bindView
. 这行得通,但感觉很笨拙。
我在这里错过了什么吗?有没有比上面的更好的模式?我是否高估了每次发生微小变化时使光标过期的成本?