77

我有一个扩展 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);
    }
}
4

2 回答 2

67

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()

于 2011-02-14T23:31:14.653 回答
67

在您的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
    }

}
于 2012-07-04T14:09:34.740 回答