在onPreferenceChange中引用另一个首选项(首选项,值)

时间:2017-09-22 04:40:17

标签: android android-preferences

我有两个相关的偏好设置(unitsdistance) 当units更改时,我想相应地转换distance。例如,如果distance 1610 米且units更改为里程,我想将其转换为 1 英里。

为此,我使用Android studio SettingsActivity代码提供的代码 但是,当distance偏好更改时,如何找到units偏好设置?

private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object value) {
        String stringValue = value.toString();

        ...
        // I need to address also the distance preference value here
        // It is not the preference given in the arguments (units) 
        // The distance preference is in another preferences fragment
        ...
    }
};

1 个答案:

答案 0 :(得分:0)

如果你不能把它放在监听器中,你可以覆盖onSharedPreferencesChanged()方法并像这样访问:

SharedPreferences prefs = getSharedPreferences(String str, Context.MODE_PRIVATE)
SharedPreferences.Editor prefEditor = prefs.edit()
editor.putInt("distance", 1610)
editor.apply()

否则使用单例的应用程序上下文。

更新以回复评论: 我为误解你的问题而道歉。在这种情况下,例如:

SharedPreferences prefs = getDefaultSharedPreferences(appContext);
int distance = prefs.getInt("distance", defaultValue);
preference.setSummary(/* whatever value you wish to pass*/);