java - SwitchPreferenceCompat setOnPreferenceChangeListener 使应用程序崩溃
问题描述
当我进入我的设置活动时我的应用程序崩溃并且错误是
java.lang.NullPointerException:尝试在 com.may.restroomv2.SettingsActivity_2$SettingsFragment.onCreatePreferences(SettingsActivity_2.爪哇:77)
我的代码是
XML
<PreferenceCategory app:title="Dark Mode">
<SwitchPreferenceCompat
app:summaryOff="Not active"
android:defaultValue="false"
app:summaryOn="Active"
app:key="@string/darkmode"
app:title="Dark Mode" />
</PreferenceCategory>
设置片段
SharedPreferences sharedPref;
sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());
SwitchPreferenceCompat switch_darkmode = (SwitchPreferenceCompat) findPreference("@string/darkmode");
switch_darkmode.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (switch_darkmode.isChecked()) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
// bottomNavigationView.setBackgroundResource(R.drawable.rounded_nav_darkmode);
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
// bottomNavigationView.setBackgroundResource(R.drawable.rounded_nav);
}
return false;
}
});
解决方案
尝试这个:
SwitchPreferenceCompat switch_darkmode = (SwitchPreferenceCompat) findPreference(
getResources().getString(R.string.darkmode)
);
解释
findPreference(CharSequence key)
将参数作为CharSequence
. 如果你放"@string/darkmode"
,它会从字面上得到这个字符串作为键。这就是为什么您findPreference
未能找到switch_darkmode
然后以NullPointerException
. 只有当您在 XML 文件(布局、菜单或首选项等)中使用这种表达式时,Android Studio 才会在构建时将其转换为相应的资源值。
推荐阅读
- python - 将 python 请求程序转换为对 curl 的调用
- python-3.x - 通过使用图像平面小部件混合它们来同时渲染两个体积
- google-sheets - 如何使这个查询正确?
- java - 在不知道输入数量的情况下计算最小、最大和平均输入值的最佳方法?
- apache-kafka - NiFi:从 Kafka 消费时过滤主题
- java - 如何使用 putExtra 将类实例传递给服务
- postgresql - 我如何从 PostgreSQL 中的 EXPLAIN (ANALYZE) 中知道大 O 表示法
- armadillo - 犰狳中的矩阵不对称警告过于严格
- c++ - 带有 CMake 的 QtCreator,在编辑器中错误地解析了 __cplusplus 值
- jquery - 超过其最大高度后如何为div应用滚动条