使PreferenceScreen不写入默认的SharedPreferences

时间:2019-01-06 05:39:29

标签: android

我有一个PreferenceScreen:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
        android:id="@+id/checkBoxHighlightWeekends"
        android:key="checkBoxHighlightWeekends"
        android:summary="Weekends are different"
        android:title="Highlight weekends" />

    <MultiSelectListPreference
        android:id="@+id/multiSelectListSelectWeekends"
        android:key="multiSelectListSelectWeekends"
        android:dialogTitle="Select weekends"
        android:entries="@array/weekends"
        android:entryValues="@array/weekends_values"
        android:summary="Saturday, Sunday"
        android:title="Select weekends"/>
</PreferenceScreen>

我试图仅使用它的“视图”部分,而不是使其写入默认的SharedPreferences。当用户更改首选项时,我会手动检查更改的数据并将其发送到MVVM存储库,然后再写入我自己的自定义SharedPreference。我计划使用LiveData在打开时更新设置屏幕。所有这些麻烦之处在于,我通常会尝试学习MVVM架构和Android。

  

MainPreferenceFragment内部:

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings_main);

    CheckBoxPreference checkBoxHighlightWeekends = getPreferenceManager().findPreference("checkBoxHighlightWeekends");
    MultiSelectListPreference multiSelectListPreference = getPreferenceManager().findPreference("multiSelectListSelectWeekends");

    checkBoxHighlightWeekends.setOnPreferenceChangeListener(changeListener);
    multiSelectListPreference.setOnPreferenceChangeListener(changeListener);
}

Preference.OnPreferenceChangeListener changeListener = new Preference.OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object o) {
        // Call method in ViewModel which will save settings state to SharedPrefs
        Logger.alert("Something changed! " + preference.getKey());
        return true;
    }
};

对设置的任何更改都会触发该功能,但是复选框停止工作-不再更改为“ tick”状态。

如何从PreferenceScreen中剥离所有默认的单击/更改功能,并使其变成哑巴视图?

0 个答案:

没有答案