【问题标题】:Android CursorAdapter save item stateAndroid CursorAdapter 保存项目状态
【发布时间】:2016-06-05 19:43:09
【问题描述】:

我有一个包含一些基本信息和心形符号的布局。当用户按下心脏符号时,心脏应该改变它的颜色(从灰色变为红色)然后我更新我的数据库(基本上将列表项的 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();
            }
        });
    }
}

如您所见,心脏颜色取决于我的数据库记录

【问题讨论】:

    标签: android cursor android-adapter android-cursoradapter


    【解决方案1】:

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

    1. 重新查询数据库以获取更新的游标
    2. 为该心脏状态保留一个单独的列表(不是光标)
    3. 使用列表而不是光标

    我的建议是使用第 3 个选项,因为它避免了其他复杂情况(滚动位置、维护等)以及数据库访问问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多