我想获取一个checkboxpreference的值。哪种方法适合听偏好?
OnPreferenceChangeListener和OnSharedPreferenceChangeListener之间的真正区别是什么?
更新
为什么onSharedPreferenceChanged不被调用?
public class Setting extends PreferenceActivity implements
OnSharedPreferenceChangeListener // ,OnPreferenceChangeListener
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);// deprecated warning
}
@Override
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {// DO Stuff
}
@Override
protected void onResume() {
super.onResume();
// getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
// PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
this.getSharedPreferences("myPrefDB", MODE_PRIVATE)
.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
// getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
// PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);
this.getSharedPreferences("myPrefDB", MODE_PRIVATE)
.unregisterOnSharedPreferenceChangeListener(this);
}
}
最佳答案
这2个之间的区别在于OnPreferenceChangeListener
仅在其首选项更改时(适用于单个键)才是称为的回调,而OnSharedPreferenceChange
是每当该SharedPreferences
对象的首选项中的任何更改时都调用的回调(适用于所有键) )。
因此,在您的情况下,您需要将OnPreferenceChangeListener
与CheckBoxPreference
一起使用。
这是一个例子:Preference ckboxPref = this.findPreference(CKBOX_PREF_KEY);
ckboxPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
//Do stuff
}
});
如果您使用 fragment ,则findPreference
方法不起作用,但是您没有使用任何 fragment ,因此很好。
关于android - OnPreferenceChangeListener和OnSharedPreferenceChangeListener之间有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13321637/