加载时检查 RecyclerView 中的 CheckBox

Check a CheckBox within a RecyclerView when it is loaded

我正在创建一个包含项目的 RecyclerView。每个项目都有 CheckBoxImageButtonTextView,如下所述:

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 时才检查 checkbox 视图。如果值为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,它会更改 每个 单个 CheckBox 待检查。我只想检查与一个特定行关联的 CheckBox,而不是每一行。我该怎么做?

我建议您创建 HashMap<> 和 link ID 和选中状态。然后,您可以从 HashMap<> 中引用并获取选中的状态。

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

然后,在你的onBindViewHolder函数中,你可以使用下面的代码来检查你CheckBox

if (hashMap.get(position) == 0) {
    // not checked
}

else {
    // checked
}

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

问题是您正在遍历游标中的每一行。相反,您需要通过调用 cursor.moveToPosition().

转到当前 position 的行

在伪代码中,您应该遵循的步骤是

  1. 打开数据库。
  2. 获取光标。
  3. 将光标移动到正确的行。
  4. 从游标中检索值。
  5. Checkbox 设置为正确的状态。
  6. 关闭光标。

我将详细信息留作 reader 的练习。