保存 RecyclerView 状态复选框

问题描述

我对 Android 开发有点陌生。

我想知道如何在 RecyclerView 中保存复选框的状态。我知道有针对此的现有解决方案,但是我在另一个 RecyclerView 中有一个使用相同复选框集的项目列表。当您点击一个项目时,它应该显示所有复选框并选中该项目之前选中的复选框。

我看到过使用 SharedPreferences 保存状态的帖子,但我在另一个 RecyclerView 中针对不同的项目点击有不同的复选框状态,我不知道如何保存这些不同的状态。

这是名为 CurrentAddonAdapter.java 的复选框列表的适配器类:

public class CurrentAddonAdapter extends RecyclerView.Adapter<CurrentAddonAdapter.ViewHolder17> {

private Context context;
private ArrayList items3,price3;
private List<AddonList> addonlist1;
private OnItemClickListener17 mOnItemClickListener17;

CurrentAddonAdapter(Context context,ArrayList items3,ArrayList price3,List addonlist1,OnItemClickListener17 onItemClickListener17){
    this.context = context;
    this.items3 = items3;
    this.price3 = price3;
    this.addonlist1 = addonlist1;
    this.mOnItemClickListener17 = onItemClickListener17;
}
@NonNull
@Override
public ViewHolder17 onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
    LayoutInflater layoutInflater = LayoutInflater.from(context);
    View view = layoutInflater.inflate(R.layout.addoncard,parent,false);
    return new ViewHolder17(view,mOnItemClickListener17);
}

private SparseBooleanArray selecteditems = new SparseBooleanArray();
@Override
public void onBindViewHolder(@NonNull final CurrentAddonAdapter.ViewHolder17 holder,int position) {
    holder.item1.setText(String.valueOf(items3.get(position)));
    holder.price1.setText(String.valueOf(price3.get(position)));
    final AddonList currentaddon = addonlist1.get(position);

    holder.item1.setChecked(selecteditems.get(position));
    holder.item1.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if(holder.item1.isChecked()){
                holder.item1.setChecked(true);
                mOnItemClickListener17.onItemCheck(currentaddon);

            }
            else{
                holder.item1.setChecked(false);
                mOnItemClickListener17.onItemUncheck(currentaddon);
            }
        }
    });

}

@Override
public int getItemCount() {
    return items3.size();

}


public class ViewHolder17 extends RecyclerView.ViewHolder implements View.OnClickListener{
    TextView price1;
    CheckBox item1;
    OnItemClickListener17 onItemClickListener17;

    public ViewHolder17(@NonNull View itemView,final OnItemClickListener17 onItemClickListener17) {
        super(itemView);

        item1 = itemView.findViewById(R.id.addoncheck);
        price1 = itemView.findViewById(R.id.priceadd);
        this.onItemClickListener17 = onItemClickListener17;

        itemView.setonClickListener(this);

    }

    @Override
    public void onClick(View v) {
        onItemClickListener17.onItemClick7(getAdapterPosition());
    }
}
public interface OnItemClickListener17{
    void onItemClick7(int position);
    void onItemCheck(AddonList addonList);
    void onItemUncheck(AddonList addonList);

}

}

这是物品点击的代码。它显示一个对话框,其中包含名为 items3price3

的 CardView 元素数组的所有复选框的列表
  Cursor viewaddon = db.viewalladdon();
    while(viewaddon.movetoNext()){
        items3.add(viewaddon.getString(2));
        price3.add(viewaddon.getString(3));
        addonlist1.add(new AddonList(viewaddon.getString(2)));
    }
    addrecycler.setHasFixedSize(true);
    currentAddonAdapter = new CurrentAddonAdapter(getActivity(),items3,price3,addonlist1,this);
    addrecycler.setAdapter(currentAddonAdapter);
    addrecycler.setLayoutManager(new linearlayoutmanager(getActivity()));

请帮忙。几个星期以来,我一直在努力寻找解决方案,但仍然找不到。我真的很需要这个去学校。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...