其他分享
首页 > 其他分享> > 加载时检查RecyclerView中的CheckBox

加载时检查RecyclerView中的CheckBox

作者:互联网

我正在创建一个包含项目的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时才选中复选框视图.如果值为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();

该代码有效,但是它检查数据库中的第一行,如果被检查的列为1,它将更改要检查的每个CheckBox.我只希望检查与某一特定行关联的CheckBox,而不是每一行.我该怎么做呢?

解决方法:

我建议您创建一个HashMap<>并链接ID和已检查状态.然后,您可以从HashMap<>中引用并获取检查状态.

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

然后,在您的onBindViewHolder函数中,可以使用以下命令检查您的CheckBox:

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

else {
    // checked
}

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

标签:android-checkbox,android-recyclerview,android-studio,android
来源: https://codeday.me/bug/20191118/2029070.html