我已经实现了自己的PreferenceFragment子类(详细的here),并希望在其中监听首选项的更改。 PreferenceFragment为您提供了两种方法:
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
和
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
应该使用哪一个?有什么不同?我不太了解distinction made in the Android docs。
最佳答案
核心区别在于它们的名称,PreferenceManger
授予开发人员用于管理SharedPreferences
的不同功能的访问权限,例如检索当前首选项值的映射或设置用户首选项。为其默认值。 PreferenceScreen
处理显示用户首选项的屏幕,以便用户可以为其分配值。有时,这意味着在具有其他首选项的屏幕上显示一个列表项,当单击嵌套PreferenceScreen
时,它会在单击时打开另一个具有更多首选项的屏幕。
您的问题暗示您认为PreferenceManager.getSharedPreferences()
和PreferenceScreen.getSharedPreferences()
之间有区别,但是根据源代码,它们是相同的。PreferenceScreen
:
public SharedPreferences getSharedPreferences() {
if (mPreferenceManager == null) {
return null;
}
return mPreferenceManager.getSharedPreferences();
}
因此
PreferenceManger
和PreferenceScreen
是不同的实体,但是这些方法返回的SharedPreference
应该是同一对象,因为PreferenceScreen
从PreferenceManager
调用了该方法。我希望这是您一直在寻找的答案。如果可以选择的话,请使用
PreferenceManager.getSharedPreferences()
,它更明显,内部调用的方法也更少。有趣的事实:
PreferenceFragment
:public PreferenceManager getPreferenceManager() {
return mPreferenceManager;
}
public PreferenceScreen getPreferenceScreen() {
return mPreferenceManager.getPreferenceScreen();
}