使用Listening进行首选项更改

时间:2014-09-29 14:08:37

标签: android android-fragments sharedpreferences android-settings

在阅读有关设置的Android文档后,我有一些关于倾听偏好更改的问题

  

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

我真的不明白,我找不到为什么实现这个监听器很重要,它的用途是什么?它有什么作用?什么时候用?现在,没有实现监听器,我的设置工作正常,对于任何设置或仅在特定情况下是否至关重要? 感谢。

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

1 个答案:

答案 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) {
         . . .
    }
}