阅读有关设置的Android文档后,我有一些关于收听首选项更改的问题


  “有多种原因可能会导致用户在使用偏好中的任何一项更改时立即得到通知。为了在任何一项偏好发生更改时接收回调,请实现SharedPreference.OnSharedPreferenceChangeListener接口并注册用于通过调用registerOnSharedPreferenceChangeListener()来共享SharedPreferences对象。”


我真的不了解它,我也找不到实现此侦听器的重要性,它的用途是什么?它有什么作用?什么时候使用?现在,在不实现侦听器的情况下,我的设置可以正常工作,对于任何设置还是仅在特定情况下是否至关重要?
谢谢。

资源:http://developer.android.com/guide/topics/ui/settings.html#Fragment

最佳答案

您不需要实现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) {
         . . .
    }
}

07-24 09:49
查看更多