问题描述
我希望当有人点击复选框时,状态会被保存,并且只有被点击的复选框保持选中状态。我发现的问题:当我点击复选框并开始另一个活动并返回所有复选框时,我如何只选中特定的复选框。
公共类 AdapterDoes 扩展 RecyclerView.Adapter
Context context;
ArrayList<Mydoes> mydoes;
public AdapterDoes(Context c,ArrayList<Mydoes> p){
context = c;
mydoes = p;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i) {
return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_does,ViewGroup,false));
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder,int i) {
myViewHolder.titleDoes.setText(mydoes.get(i).getTitleDoes());
myViewHolder.Describedoes.setText(mydoes.get(i).getDescribedoes());
myViewHolder.dateDoes.setText(mydoes.get(i).getDateDoes());
myViewHolder.alarm.setText(mydoes.get(i).getAlarm());
if (myViewHolder.checkBox2.isChecked()){
myViewHolder.titleDoes.setAlpha(0.4f);
myViewHolder.titleDoes.setPaintFlags(myViewHolder.titleDoes.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("checkBox",myViewHolder.checkBox2.isChecked()).commit();
}else{
myViewHolder.titleDoes.setAlpha(1f);
PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("checkBox",myViewHolder.checkBox2.isChecked()).commit();
}
myViewHolder.checkBox2.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (myViewHolder.checkBox2.isChecked()){
myViewHolder.titleDoes.setAlpha(0.4f);
myViewHolder.titleDoes.setPaintFlags(myViewHolder.titleDoes.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("checkBox",myViewHolder.checkBox2.isChecked()).commit();
} else if (!myViewHolder.checkBox2.isChecked()){
myViewHolder.titleDoes.setAlpha(1f);
PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("checkBox",myViewHolder.checkBox2.isChecked()).commit();
}
}
});
myViewHolder.itemView.setonClickListener(new View.OnClickListener() {
final String getTitleDoes = mydoes.get(i).getTitleDoes();
final String getDescribedoes = mydoes.get(i).getDescribedoes();
final String getDateDoes = mydoes.get(i).getDateDoes();
final String getAlarm = mydoes.get(i).getAlarm();
final String getKeyDoes = mydoes.get(i).getKeyDoes();
@Override
public void onClick(View v) {
Intent i = new Intent(context,Edit_Check.class);
i.putExtra("titleDoes",getTitleDoes);
i.putExtra("Describedoes",getDescribedoes);
i.putExtra("dateDoes",getDateDoes);
i.putExtra("alarm",getAlarm);
i.putExtra("keyDoes",getKeyDoes);
context.startActivity(i);
}
});
}
@Override
public int getItemCount() {
return mydoes.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView titleDoes,Describedoes,dateDoes,alarm,keyDoes;
CheckBox checkBox2;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
titleDoes = (TextView) itemView.findViewById(R.id.titleDoes);
Describedoes = (TextView) itemView.findViewById(R.id.Describedoes);
dateDoes = (TextView) itemView.findViewById(R.id.dateDoes);
alarm = (TextView) itemView.findViewById(R.id.alarm);
checkBox2 = (CheckBox) itemView.findViewById(R.id.checkBox2);
boolean checked = PreferenceManager.getDefaultSharedPreferences(context).getBoolean("checkBox",false);
checkBox2.setChecked(checked);
}
}
}
解决方法
你有一个映射来缓存复选框状态,替换复选框 api 以避免 recyclerview 重用