Android 在加载RecyclerView时选中该视图中的复选框

Android 在加载RecyclerView时选中该视图中的复选框,android,android-studio,android-recyclerview,android-checkbox,Android,Android Studio,Android Recyclerview,Android Checkbox,我正在创建一个包含项目的RecyclerView。每个项目都有一个复选框,图像按钮和一个文本视图,如下所述: public class RecyclerViewViewHolder extends RecyclerView.ViewHolder { RelativeLayout item; TextView id; TextView name; ImageButton delete; CheckBox checkBox; public Recyc

我正在创建一个包含项目的
RecyclerView
。每个项目都有一个
复选框
图像按钮
和一个
文本视图
,如下所述:

public class RecyclerViewViewHolder extends RecyclerView.ViewHolder {
    RelativeLayout item;
    TextView id;
    TextView name;
    ImageButton delete;
    CheckBox checkBox;

    public RecyclerViewViewHolder(View view) {
        super(view);

        item = (RelativeLayout) view.findViewById(R.id.layout_item_item);
        id = (TextView) view.findViewById(R.id.layout_item_id);
        name = (TextView) view.findViewById(R.id.layout_item_name);
        delete = (ImageButton) view.findViewById(R.id.layout_item_delete);
        checkBox = (CheckBox) view.findViewById(R.id.layout_item_checkbox);
    }
}
我希望仅当数据库列中的某个值等于
1
时,才选中
复选框
视图。如果该值为
0
,则不应进行检查。我从以下代码开始:

SQLiteDatabaseAdapter database = new SQLiteDatabaseAdapter(context);
    database.open();

    Cursor cursor = database.getAllItems(table);

    if (cursor.moveToFirst()) {
        do {
            if (cursor.getInt(2) == 0) {
                viewHolder.checkBox.setChecked(false);
            }

            else {
                viewHolder.checkBox.setChecked(true);
            }

        } while (cursor.moveToNext());

    }

    database.close();

此代码可以工作,但它会检查数据库中的第一行,如果
checked
列为
1
,则它会更改每一个要检查的
复选框。我只希望选中与一个特定行关联的
复选框,而不是每一行。我该怎么做呢?

我建议您创建一个
HashMap
,并链接ID和选中状态。然后,您可以从
HashMap
中引用并获得选中的状态

HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();

确保从SQLite数据库中添加ID和已检查状态。

问题在于您正在遍历游标中的每一行。相反,您需要通过调用转到当前
位置的行

在伪代码中,您应该遵循以下步骤

  • 打开数据库
  • 获取光标
  • 将光标移动到正确的行
  • 从光标中检索值
  • 复选框设置为正确状态
  • 关闭光标

  • 我把细节留给读者作为练习。

    使用hashmap保存数据库中的数据并通知recyclerview adapater。在适配器的onBIndView()处,根据hashmap中的数据选中复选框。@Malith Lakshan我将尝试使用hashmap。请显示哪个类和方法包含代码段。我现在已经找到了答案。我对整个
    HashMap
    的事情不是很确定。所有代码都在上面。它位于
    onBindViewHolder
    函数中,该函数是代码的第二部分。我非常乐意接受更多的建议。请随意编辑您的问题以显示包含的类和方法。这将有助于使你的问题更清楚。至于答案,我很快就会发布一些东西。谢谢,我一直在等待答案。我不知道该怎么做。现在我可以自己计算数据库部分了。作为一个小建议,
    List
    或array可能比
    HashMap
    更合适,因为键是
    Integer
    s。(当然,这一点对于OP来说似乎毫无意义。我只是想把它贴在这里给未来的子孙后代。)@Code-peedient绝对是!如果您只想要一个特定的值,就用另一个值检索它,我发现
    HashMap
    更好,但是
    List
    也是一个不错的选择!就个人而言,我认为这应该是公认的答案。@Dynamix否。唯一的
    if
    语句应该是检查数据库中正确行中的值的语句。好吧。只是想让你知道,我放弃了这个项目,但我会用你的反馈为我的新项目。所以,谢谢你,我真的很感谢你的帮助,谢谢你投下的信任票。当然,如果存在任何效率问题,数据结构解决方案也有其一席之地。
    if (hashMap.get(position) == 0) {
        // not checked
    }
    
    else {
        // checked
    }