如何检测首选项是否有变化?

mix*_*kat 72 android preferenceactivity android-preferences sharedpreferences

我有一个扩展PreferenceActivity的类,并显示我的应用程序的首选项屏幕.是否可以检查是否对首选项进行了任何更改?

这有助于......

http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html

其他相关帖子: SharedPreferences.onSharedPreferenceChangeListener未被一致地调用


public class PreferenceClass extends PreferenceActivity {

    OnSharedPreferenceChangeListener listener;

    public void onCreate(Bundle savedInstanceState) {
        SharedPreferences prefs = this.getSharedPreferences("settings", 0);
        listener = new SharedPreferences.OnSharedPreferenceChangeListener() {

            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
                int flag = 1;
            }
        };
        prefs.registerOnSharedPreferenceChangeListener(listener);
        super.onCreate(null);
        addPreferencesFromResource(R.xml.settings);
    }
}
Run Code Online (Sandbox Code Playgroud)

tec*_*ces 64

SharedPreferences.OnSharedPreferenceChangeListener spChanged = new
                           SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        // your stuff here
    }
};
Run Code Online (Sandbox Code Playgroud)

在你的PreferenceActivity,即使它成为你的PreferenceActivity类的成员,然后registerOnSharedPreferenceChangeListener(spChanged)PreferenceActivity.onCreate()方法中.

这就是我的工作,我从来没有遇到过问题.

否则,你的监听器中的条件检查是错误的.发布代码.

编辑:

从您发布的代码中,您应该创建prefs一个类成员变量,以便它具有全局范围.

prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());不是getSharedPreferences因为你没有创建该文件.

要创建您需要使用的文件PreferenceManager.要获得PreferenceManager,请使用Activity.getPreferenceManager().


Jon*_*han 64

在您的PreferenceActivity课程中,实现SharedPreferences.OnSharedPreferenceChangeListener界面.将所需onSharedPreferenceChanged方法添加到您的类并在其中注册onCreate.

请参阅示例代码:

public class MyPreferences extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.fw_preferences); //deprecated
        PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // handle the preference change here
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 在MainActivity的onDestroy()中执行unregisterOnSharedPreferenceChangeListener(this)是一个好习惯吗? (2认同)