2

在阅读了关于设置的 Android 文档后,我有几个关于监听偏好变化的问题

“有几个原因,您可能希望在使用更改其中一个首选项时立即收到通知。为了在任何一个首选项发生更改时接收回调,请实现 SharedPreference.OnSharedPreferenceChangeListener 接口并注册监听器SharedPreferences 对象通过调用 registerOnSharedPreferenceChangeListener()。"

我真的不明白,我找不到为什么实现这个监听器很重要,它有什么用?它有什么作用?什么时候使用它?现在,如果不实现监听器,我的设置就可以正常工作,对于任何设置或仅在特定情况下都至关重要吗?谢谢。

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

4

1 回答 1

4

您不需要实施OnSharedPreferenceChangeListener. 这是一种方便的功能。

有时您想对偏好的变化立即做出反应。例如,如果您有一个“设置”操作,用户可以在其中更改活动的背景颜色,那么当用户进行选择时,您希望背景颜色立即更改,而不是在用户重新启动时更改活动。一种方法是让活动在 中检查背景偏好的状态onResume(),但另一种方法是让活动在 中注册和(在 中取消注册OnSharedPreferenceChangeListener)。我发现以这种方式使用监听器有时会导致代码更简单。当应该对设置更改做出反应的代码通常不参与框架的生命周期方法时,它也有很大帮助。onStartonStop

实现一个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) {
         . . .
    }
}
于 2014-09-29T14:15:58.437 回答