android - 使用倾听来了解偏好变化

标签 android android-fragments sharedpreferences android-settings

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

"There are several reasons you might want to be notified as soon as the use changes one of the preferences. In order to receive a callback when a change happens to any one of the preferences, implement the SharedPreference.OnSharedPreferenceChangeListener interface and register the listener for the SharedPreferences object by calling registerOnSharedPreferenceChangeListener()."

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

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

最佳答案

您无需实现 OnSharedPreferenceChangeListener 。这是为了方便而存在的功能。

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

实现OnSharedPreferenceChangeListener非常简单。您只需将您的类(class)声明为 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) {
         . . .
    }
}

关于android - 使用倾听来了解偏好变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26101873/

相关文章:

java - 我在 android studio 上有一个 R.Layout.main 错误

android - android UI中setLayoutParams方法的问题

java - 安卓 : Google map is not updating while zooming in

android SharedPreferences null 键、值和集合<?> - 极端情况

android - 有什么方法可以使用 Robotium 清除默认共享首选项吗?

android - 将 edittext 高度增加到 5 行,就像在 whatsapp 中一样

android - 腾讯NCNN检测功能在android修改

java - 在抽屉 fragment 中实现滑动标签

java - 将 RecyclerView 代码直接从 Activity 移动到 Fragment,这些错误是什么意思?

java - 共享首选项用户名