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

时间:2011-02-14 22:15:20

标签: android sharedpreferences android-preferences preferenceactivity

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

2 个答案:

答案 0 :(得分:62)

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
    }

}

答案 1 :(得分:59)

待办事项

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