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

这有帮助...

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

其他相关职位:
SharedPreferences.onSharedPreferenceChangeListener not being called consistently

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);
    }
}

最佳答案


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

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

那就是我所做的,而且我从来没有问题。

否则,是您有条件地检查监听器是否出错。发布代码。

编辑:

从发布的代码中,应将prefs设置为类成员变量,以使其具有全局作用域。

并执行prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());而不是getSharedPreferences,因为您尚未创建该文件。

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

10-08 18:01