java - 从 RecyclerView Adapter 类保存 CheckBox 状态

标签 java android sharedpreferences

所以我想通过 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/

相关文章:

java - 如何从第二个 .java 类文件获取 getSystemService 以在 Android Studio 中工作?

android - 对 app compat v21 中的 TextAppearance 样式感到困惑

android - 如何在 sharedpreferences 中保存一些值并在下一个 Activity 中获取它

android - Android 中共享首选项的奇怪问题

java - 在 Java 中为数组赋值?

java - Heroku 上的 Spring Boot Gradle 应用程序 : Unable to access jarfile

java - 为什么我在 Eclipse 中收到 "Selection does not contain a main type"消息?

android - 在 Android 中创建动态 Spinner

android - 声明 SharedPreferences.Editor 会使我的应用程序崩溃

java - 传递 SelectOneMenu 值以在 JSF/Primefaces 中添加功能