我想获得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);
}
}
答案 0 :(得分:14)
这两者之间的区别在于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
}
});
如果您使用片段,方法findPreference
不起作用,但您没有使用任何片段,因此它很好。