如何在android中的recyclerview中保存复选框状态

问题描述

我希望当有人点击复选框时,状态会被保存,并且只有被点击的复选框保持选中状态。我发现的问题:当我点击复选框并开始另一个活动并返回所有复选框时,我如何只选中特定的复选框。

公共类 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 重用

相关问答

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