SharedPreferences不保存复选框

问题描述 投票:-1回答:1

先生们,此代码不起作用,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;
    }
}```
sharedpreferences android-checkbox
1个回答
0
投票

您应该使用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);
© www.soinside.com 2019 - 2024. All rights reserved.