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

  • 在Android应用程序中存储用户名和密码的最佳选择
  • 操作栏主页按钮无法使用嵌套的PreferenceScreen
  • Android小部件:在小部件添加到屏幕之前显示配置活动
  • Androidunit testing:如何清除SharedPreferences
  • Android的SharedPreferences限制?
  • 奇怪的exception:使用getBoolean时无法将String强制转换为Boolean
  • 如何在没有Dagger的MVP中使用共享首选项并且不会导致Presenter依赖于上下文?
  • 在SharedPreferences中encryption数据
  • 这两者之间的区别在于, 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 ,如果你使用片段,但你没有使用任何,所以它是好的。