我有一个扩展PreferenceActivity的类,并显示我的应用程序的首选项屏幕。是否可以检查是否对首选项进行了任何更改?
这有助于......
其他相关帖子: 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);
}
}
答案 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()
。