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
}