问题描述
我对 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);
}
}
这是物品点击的代码。它显示了一个对话框,其中包含名为 items3 和 price3
的 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 (将#修改为@)