加载时检查 RecyclerView 中的 CheckBox
Check a CheckBox within a RecyclerView when it is loaded
我正在创建一个包含项目的 RecyclerView
。每个项目都有 CheckBox
、ImageButton
和 TextView
,如下所述:
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
的行
在伪代码中,您应该遵循的步骤是
- 打开数据库。
- 获取光标。
- 将光标移动到正确的行。
- 从游标中检索值。
- 将
Checkbox
设置为正确的状态。
- 关闭光标。
我将详细信息留作 reader 的练习。
我正在创建一个包含项目的 RecyclerView
。每个项目都有 CheckBox
、ImageButton
和 TextView
,如下所述:
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
的行
在伪代码中,您应该遵循的步骤是
- 打开数据库。
- 获取光标。
- 将光标移动到正确的行。
- 从游标中检索值。
- 将
Checkbox
设置为正确的状态。 - 关闭光标。
我将详细信息留作 reader 的练习。