随着首选项的更改,我在更新 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/