Android:通过监听器更新 sharedPreferences 摘要

标签 android sharedpreferences summary

随着首选项的更改,我在更新 SharedPreferences 中的摘要行时遇到了一些问题。我在 onResume() 中注册了 OnSharePreferenceChangeListener,在 onPause() 中注销了它。

监听器正在运行,我可以使用 onSharedPreferenceChanges() 方法。我遇到的问题是能够在那里检索首选项,以便我可以调用 setSummary()。我在 Ice Cream Sandwich 中,似乎 findPreference(key) 方法已被弃用。所以:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Preference pref = findPreference(key);}

不起作用,实际上为 pref 返回 null。从我看到的例子中,你需要得到一个偏好来调用setSummary()就可以了,有想法吗?

最佳答案

你不应该为此使用 onSharedPreferenceChangedListener

相反,使用类似的东西。

ListPreference myPreference = (ListPreference) findPreference("preference_key");
myPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        if (((String)newValue).equals("some_value")) {
            preference.setSummary("my summary");
        }
    }
});

findPreference 并未弃用,但您不应使用 PreferenceActivity(已弃用)。如果您只需要支持 Android 3.0+,那么您应该切换到 PreferenceFragment 的新方法。如果您需要支持 Android 2.1+ 就可以了,您可以忽略警告。

关于Android:通过监听器更新 sharedPreferences 摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11639456/

相关文章:

java - 我们可以在同一个类中拥有两个共享偏好的实例吗?

android - 从广播接收器启动 Activity 时无法访问共享首选项

c# - 是否可以查看使用接口(interface)实例化的类方法的摘要?

r - lme4::lmer 摘要对象包含带字符串的 double 对象

mysql - 报告所有可能的列组合

安卓工作室 : unable to find valid certification path to requested target

android - 如何将visual c++库导入到android studio项目中?

java - 如何使用lxml更改android xml文件中的属性值,例如 "android:text"

android - 目标主机不能为 null 或在 parameters.scheme=null,host=null 中设置

java - 如何使用共享首选项将媒体静音