Android CursorAdapter保存项目状态

时间:2016-06-05 19:43:10

标签: android cursor android-adapter android-cursoradapter

我有一些基本信息和心脏符号的布局。当用户按下心脏符号心脏应该改变它的颜色(从灰色变成红色),然后我更新我的数据库(基本上将列表项的id插入我的数据库)。当我按下心脏符号一切正常工作(心脏颜色变化和我的数据库的新记录插入)但当我向下滚动然后回到相同的位置(我之前按下心脏图标)心脏图标仍然是灰色

这是我的代码

public class MyCursorAdapter extends CursorAdapter {
    private LayoutInflater mLayoutInflater;
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        return mLayoutInflater.inflate(R.layout.list_info_layout, parent, false);
    }

     @Override
    public void bindView(View view, Context context, final Cursor cursor) {
        final ImageView heartImg = (ImageView) view.findViewById(R.id.heart);
        int typeId = cursor.getInt(1);

        if(typeId == 0){
            heartImg.setImageResource(R.drawable.redHeart);
        } else {
            heartImg.setImageResource(R.drawable.greyHeart);
        }

        heartImg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DatabaseUpdater.getInstance(myContext).update(id);
               // notifyDataSetChanged();
            }
        });
    }
}

你可以看到心脏颜色取决于我的数据库记录

1 个答案:

答案 0 :(得分:0)

您所看到的是预期的。游标在设计上是不可变的,这意味着在光标被检索之后对数据库所做的任何更改都不会在该游标中。有几个简单的选择:

  1. 重新查询数据库以获取更新的游标
  2. 为该心脏状态(不是光标)保留一个单独的列表
  3. 使用列表<>而不是光标
  4. 我的建议是使用第3个选项,因为它避免了其他复杂情况(滚动位置,维护等)以及数据库访问问题。