gpt4 book ai didi

java - 从 RecyclerView Adapter 类保存 CheckBox 状态

转载 作者:行者123 更新时间:2023-12-01 06:09:33 27 4
gpt4 key购买 nike

所以我想通过 RecyclerView 适配器类中的 SharedPreferences 保存 CheckBox 状态,如下所示:

checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkBox.isChecked()){
title.setPaintFlags(title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
title.setAlpha(0.5f);
PreferenceManager.getDefaultSharedPreferences(c).edit().putBoolean("checkBox", checkBox.isChecked()).commit();
} else if (!checkBox.isChecked()){
title.setPaintFlags(0);
title.setAlpha(0.8f);
PreferenceManager.getDefaultSharedPreferences(c).edit().putBoolean("checkBox", checkBox.isChecked()).commit();
}
}
});

不要介意油漆标志。

我正在像这样检索 Activity 中的数据(在 onCreate 中):

 checkBox = (CheckBox) findViewById(R.id.checkBoxDoneOrNotNaListi);
boolean checked = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("checkBox", false);
checkBox.setChecked(checked);

并获取 NullPointerException

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.CheckBox.setChecked(boolean)' on a null object reference

我做错了什么?

最佳答案

/**
* save selected <position, checkBoxState>
*/
private SparseBooleanArray mSelectedItem = new new SparseBooleanArray(listData.size());
/**
* true: allow checkbox change, else otherwise
* purpose update checkbox state on bind data
*/
private boolean isAllowOnCheckChange = true;

@onBindViewHolder

isAllowOnCheckChange = false;
itemHolder.checkBox.setChecked(mSelectedItem.get(position));
isAllowOnCheckChange = true;
itemHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isAllowOnCheckChange)
mSelectedItem.put(position, isChecked);
}
});

demo

关于java - 从 RecyclerView Adapter 类保存 CheckBox 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37634166/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com