Android 什么';OnPreferenceChangeListener和OnSharedPreferenceChangeListener之间有什么不同
我想获取checkboxpreference的值。哪种方法适合倾听偏好 OnPreferenceChangeListener和OnSharedPreferenceChangeListener的真正区别是什么 更新 为什么未调用onSharedPreferenceChangedAndroid 什么';OnPreferenceChangeListener和OnSharedPreferenceChangeListener之间有什么不同,android,sharedpreferences,android-preferences,Android,Sharedpreferences,Android Preferences,我想获取checkboxpreference的值。哪种方法适合倾听偏好 OnPreferenceChangeListener和OnSharedPreferenceChangeListener的真正区别是什么 更新 为什么未调用onSharedPreferenceChanged public class Setting extends PreferenceActivity implements OnSharedPreferenceChangeListener // ,OnPrefe
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);
}
}
这二者之间的区别在于,
onpreferencechangeelistener
是一个回调,仅当其首选项更改(应用于单个键)时才调用,而OnSharedPreferenceChange
是一个回调,每当SharedPreferences
对象中的任何首选项更改时调用(适用于所有钥匙)
因此,在您的情况下,您需要将OnPreferenceChangeListener
与复选框preference
一起使用
以下是一个例子:
Preference ckboxPref = this.findPreference(CKBOX_PREF_KEY);
ckboxPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
//Do stuff
}
});
如果您使用片段,则方法
findReference
不起作用,但您没有使用任何片段,因此它很好。为什么不起作用?:@Override public void onSharedPreferenceChanged(SharedReferences SharedReferences,String key){if(key.equalsIgnoreCase(“myKey”)…什么不起作用?更改首选项时不会调用它?是否在包含此键的SharedReferences
对象上调用它?请在问题中添加代码。它不会调用,因为(可能)“myPrefDB”不是您的首选项活动使用的名称。不,我认为您不需要在活动暂停时取消注册。毕竟,活动暂停时首选项不会更改,因为它仅在此活动中更改。。。