在阅读有关设置的Android文档后,我有一些关于倾听偏好更改的问题
“一旦使用更改其中一个首选项,您可能希望收到通知的原因有多种。为了在任何一个首选项发生更改时收到回调,请实现SharedPreference.OnSharedPreferenceChangeListener接口并注册通过调用registerOnSharedPreferenceChangeListener()获得SharedPreferences对象的监听器。“
我真的不明白,我找不到为什么实现这个监听器很重要,它的用途是什么?它有什么作用?什么时候用?现在,没有实现监听器,我的设置工作正常,对于任何设置或仅在特定情况下是否至关重要? 感谢。
资源:http://developer.android.com/guide/topics/ui/settings.html#Fragment
答案 0 :(得分:1)
您无需实施OnSharedPreferenceChangeListener
。为方便起见,这是一种能力。
有时您希望立即对偏好的变化做出反应。例如,如果你有一个"设置"例如,用户可以更改活动的背景颜色的操作,然后当用户进行选择时,您希望立即更改背景颜色,而不是在用户重新启动活动时。一种方法是让活动在onResume()
中检查背景偏好的状态,但另一种方法是让活动在OnSharedPreferenceChangeListener
中注册onStart
并取消注册onStop
)。我发现以这种方式使用监听器有时可以使代码更简单。当应对设置更改做出反应的代码通常不参与框架的生命周期方法时,它也会有很大帮助。
实施OnSharedPreferenceChangeListener
非常简单。您只需将您的类声明为implements OnSharedPreferenceChangeListener
或实现一个对象即可。例如:
public class MyActivity extends Activity {
. . .
private final OnSharedPreferenceChangeListener mPrefsListener =
new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key)
{
if (key.equals(IMPORTANT_PREF_KEY)) {
setImportantValue(sharedPrefs.getInt(IMPORTANT_PREF_KEY, -1));
}
}
};
@Override
protected void onStart() {
super.onStart();
PreferenceManager.getDefaultSharedPreferences(this)
.registerOnSharedPreferenceChangeListener(mPrefsListener);
}
@Override
protected void onStop() {
super.onStop();
PreferenceManager.getDefaultSharedPreferences(this)
.unregisterOnSharedPreferenceChangeListener(mPrefsListener);
}
void setImportantValue(int value) {
. . .
}
}