我有一个扩展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()
。