使用 PreferenceDataStore 时 PreferenceScreen/PreferenceFragment 的初始值
Initial values for PreferenceScreen/PreferenceFragment when using PreferenceDataStore
我正在实现一个首选项屏幕,它是一个 XML 文件,其中 PreferenceScreen 标记在 PreferenceFragment 中膨胀。通常这是由 SharedPreferences 支持的,但是对于我的特殊情况,我们将 SharedPreferences 交换为自定义 PreferenceDataStore 以获取某些首选项。
在 Fragment onCreate 方法中,我们获取个人偏好并将它们挂接到 PreferenceDataStore。
SwitchPreference pref = (SwitchPreference) findPreference("my_boolean_preference");
pref.setPreferenceDataStore(dataStore);
除首次显示屏幕时忽略当前值外,这工作正常。当屏幕首次显示正确时,如何获取该值。我应该把上面的代码放在 onCreate 以外的地方吗?我应该调用一些刷新或重新绑定吗?
目前我正在通过在调用 setPreferenceDataStore 后手动设置值来解决这个问题。
pref.setChecked(dataStore.getBoolean("my_boolean_preference", false));
来自here:
Note: If you set a data store for a Preference after the Preference is
attached to the hierarchy, the initial value for the Preference is not
propagated again.
你可以这样做:
class MyFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
super.onCreatePreferences(savedInstanceState, rootKey)
// set dataStore before calling setPreferencesFromResource()
preferenceManager?.preferenceDataStore = dataStore
setPreferencesFromResource(R.xml.prefs_main, rootKey)
...
}
}
我正在实现一个首选项屏幕,它是一个 XML 文件,其中 PreferenceScreen 标记在 PreferenceFragment 中膨胀。通常这是由 SharedPreferences 支持的,但是对于我的特殊情况,我们将 SharedPreferences 交换为自定义 PreferenceDataStore 以获取某些首选项。
在 Fragment onCreate 方法中,我们获取个人偏好并将它们挂接到 PreferenceDataStore。
SwitchPreference pref = (SwitchPreference) findPreference("my_boolean_preference");
pref.setPreferenceDataStore(dataStore);
除首次显示屏幕时忽略当前值外,这工作正常。当屏幕首次显示正确时,如何获取该值。我应该把上面的代码放在 onCreate 以外的地方吗?我应该调用一些刷新或重新绑定吗?
目前我正在通过在调用 setPreferenceDataStore 后手动设置值来解决这个问题。
pref.setChecked(dataStore.getBoolean("my_boolean_preference", false));
来自here:
Note: If you set a data store for a Preference after the Preference is attached to the hierarchy, the initial value for the Preference is not propagated again.
你可以这样做:
class MyFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
super.onCreatePreferences(savedInstanceState, rootKey)
// set dataStore before calling setPreferencesFromResource()
preferenceManager?.preferenceDataStore = dataStore
setPreferencesFromResource(R.xml.prefs_main, rootKey)
...
}
}