保持ListView CursorAdapter数据更新的推荐模式

时间:2013-02-06 14:11:01

标签: android android-listview android-cursoradapter

我有一个表示待办事项列表的SQLite表。每行都有_idtitlecompleted标记。我有一个ListView,其中每一行都有标题,并且复选框映射到completed标志。我有一个自定义CursorAdapter,用于设置bindView中的复选框状态。该复选框具有OnClick回调函数,可在切换时更新数据库状态。

问题是当项目在屏幕上滚动并返回时,复选框会丢失状态,因为视图是从过时的光标数据重建的。

我知道这里首选的解决方案是每次数据更改时转储和重新获取光标。这让我觉得痛苦无效。切换复选框时,我的结果集中的一位数据已经发生了变化。抛弃整个光标感觉就像是矫枉过正。

我尝试的另一种方法是缓存completed标志,在项目切换时更新数据库和缓存,并检查bindView中的缓存。这很有效,但感觉很糟糕。

我在这里遗漏了什么吗?有没有比上面更好的模式?每次发生微小变化时,我是否过高估计光标到期的成本?

1 个答案:

答案 0 :(得分:0)

我不担心基于用户输入的光标刷新效率。这是一个不变的成本,你不会注意到它。

另一种方法是覆盖setViewValue并手动设置这些复选框。您可以在下面找到如何做到这一点的想法。

public class MyViewBinder implements SimpleCursorAdapter.ViewBinder {

  public boolean setViewValue(View view, Cursor cursor, int columnIndex) {

    int viewId = view.getId();
    switch (viewId) {
        case R.id.flag:

            // Sett the flag based on e.g. an array you have with the states

            return true;
            break;

        default:
            // There is no specific way of showing this, hence go for default
            return = false;
    }
  }
}