OnPreferenceChangeListener和OnSharedPreferenceChangeListener有什么不同

我想获得一个checkbox首选项的值。 哪种方法适合倾听偏好?

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); } } 

Solutions Collecting From Web of "OnPreferenceChangeListener和OnSharedPreferenceChangeListener有什么不同"

这两者之间的区别在于, OnPreferenceChangeListener仅当其首选项更改(适用于单个键)时OnSharedPreferenceChange的callback,而OnSharedPreferenceChange是每当SharedPreferences对象中的任何首选项更改(适用于所有键)时调用的callback。

所以,在你的情况下,你需要在你的CheckBoxPreference使用OnPreferenceChangeListener

这里是一个例子:

 Preference ckboxPref = this.findPreference(CKBOX_PREF_KEY); ckboxPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { //Do stuff } }); 

findPreference方法findPreference ,如果你使用片段,但你没有使用任何,所以它是好的。