先生们,此代码不起作用,CheckBox值未保存,该代码位于RecyclerView适配器中,我尚未尝试过,没有任何作用,请告诉我如何使其起作用?!
提前感谢!
//SharedPreferences
final SharedPreferences prefs = context.getSharedPreferences("myPrefs", Context.MODE_PRIVATE);
final SharedPreferences.Editor editor = prefs.edit();
prefs.getBoolean("sName", false);
holder.sName4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v != null) {
holder.sName5.setChecked(true);
holder.sName3.setTextColor(ContextCompat.getColor(context, R.color.Checked));
holder.sName4.setCardBackgroundColor(ContextCompat.getColor(context, R.color.colorCVA));
editor.putBoolean("sName", true);
editor.apply();
} else {
holder.sName5.setChecked(false);
holder.sName3.setTextColor(ContextCompat.getColor(context, R.color.lblListItem3));
holder.sName4.setCardBackgroundColor(ContextCompat.getColor(context, R.color.colorCVNA));
editor.putBoolean("sName", false);
editor.apply();
}
}
});
然后如何获取数据?
UPDATE我有一个用于多个片段的适配器,因此复选框也在其他片段中标记。
此刻的代码适配器:
public class RVAClist extends RecyclerView.Adapter<RVAClist.ViewHolder> {
private final LayoutInflater inflater;
private final List<PCClist> cl;
private final Context context;
RVAClist(Context context, List<PCClist> clist) {
this.context = context;
this.cl = clist;
this.inflater = LayoutInflater.from(context);
}
@Override
public RVAClist.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.list_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final RVAClist.ViewHolder holder, final int position) {
final PCClist clist = cl.get(position);
holder.sName1.setText(clist.getsText1());
holder.sName3.setText(clist.getsText3());
holder.sName2.setText(clist.getsText2());
holder.sName1.setTextColor(ContextCompat.getColor(context, R.color.lblListItem));
holder.sName2.setTextColor(ContextCompat.getColor(context, R.color.lblListItem2));
holder.sName5.setOnCheckedChangeListener(null);
holder.sName5.setChecked(clist.isChecked());
//SharedPreferences
final SharedPreferences prefs = context.getSharedPreferences("myPrefs", Context.MODE_PRIVATE);
final SharedPreferences.Editor editor = prefs.edit();
boolean value = prefs.getBoolean("sName" + holder.getAdapterPosition(), false);
holder.sName5.setChecked(value);
holder.sName4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v != null) {
holder.sName5.setChecked(true);
holder.sName3.setTextColor(ContextCompat.getColor(context, R.color.Checked));
holder.sName4.setCardBackgroundColor(ContextCompat.getColor(context, R.color.colorCVA));
editor.putBoolean("sName" + holder.getAdapterPosition(), true);
editor.apply();
} else {
holder.sName5.setChecked(false);
holder.sName3.setTextColor(ContextCompat.getColor(context, R.color.lblListItem3));
holder.sName4.setCardBackgroundColor(ContextCompat.getColor(context, R.color.colorCVNA));
editor.putBoolean("sName" + holder.getAdapterPosition(), false);
editor.apply();
}
}
});
holder.sName5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
clist.setChecked(isChecked);
if(holder.sName5.isChecked()) {
holder.sName5.setChecked(true);
holder.sName3.setTextColor(ContextCompat.getColor(context, R.color.Checked));
holder.sName4.setCardBackgroundColor(ContextCompat.getColor(context, R.color.colorCVA));
editor.putBoolean("sName" + holder.getAdapterPosition(), true);
editor.apply();
} else {
holder.sName5.setChecked(false);
holder.sName3.setTextColor(ContextCompat.getColor(context, R.color.lblListItem3));
holder.sName4.setCardBackgroundColor(ContextCompat.getColor(context, R.color.colorCVNA));
editor.putBoolean("sName" + holder.getAdapterPosition(), false);
editor.apply();
}
}
});
}
@Override
public int getItemCount() {
return cl.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
final TextView sName1, sName2, sName3;
final CheckBox sName5;
final CardView sName4;
ViewHolder(View view) {
super(view);
sName1 = (TextView) view.findViewById(R.id.lblListItem);
sName5 = (CheckBox) view.findViewById(R.id.checkBox2);
sName3 = (TextView) view.findViewById(R.id.lblListItem3);
sName2 = (TextView) view.findViewById(R.id.lblListItem2);
sName4 = (CardView) view.findViewById(R.id.item_card);
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
}```
您应该使用prefs.getBoolean("sName", false);
的结果来设置复选框的选中状态。
boolean value = prefs.getBoolean("sName", false);
holder.sName5.setChecked(value);
编辑由于OP在适配器中具有多个不会更改其内容的复选框,因此也可以应用以下解决方案:
boolean value = prefs.getBoolean("sName" + holder.getAdapterPosition(), false);
holder.sName5.setChecked(value);
并且在保存中,您需要做:
editor.putBoolean("sName" + holder.getAdapterPosition(), false);