Android PreferenceFragment-getPreferenceManager()和getPreferenceScreen()之间的差异?
我已经实现了我自己的PreferenceFragment子类(detailed),并希望在其中监听偏好的更改。PreferenceFragment为您提供了两种方法:Android PreferenceFragment-getPreferenceManager()和getPreferenceScreen()之间的差异?,android,android-preferences,android-sharedpreferences,Android,Android Preferences,Android Sharedpreferences,我已经实现了我自己的PreferenceFragment子类(detailed),并希望在其中监听偏好的更改。PreferenceFragment为您提供了两种方法: getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 及 应该使用哪一种?有什么区别?我真的不明白。第一个从PreferenceManager获取共享首选项。第二个来自首选项屏幕,它从首选项类继承
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
及
应该使用哪一种?有什么区别?我真的不明白。第一个从
PreferenceManager
获取共享首选项。第二个来自首选项屏幕
,它从首选项
类继承了此方法
我认为这不是功能上的区别,因为两者返回的
SharedReferences
对象的实例可能相同,但我认为使用第一个实例(使用PreferenceManager
而不是PreferenceScreen
)更为清晰。PreferenceScreen请参见说明
PreferenceScreen类可以出现在两个位置:
- 当PreferenceActivity指向此项时,它将用作根和 未显示(仅显示包含的首选项)
- 当它出现在另一个首选项层次结构中时,它将显示并显示 作为另一个首选项屏幕的网关(通过 将另一个首选项屏幕显示为对话框或通过 getIntent()中的startActivity(android.content.Intent)。这个 此首选项屏幕的子项不会显示在 此首选项屏幕显示在中。相反,将使用一个单独的屏幕 单击此首选项时显示
getPreferenceManager()
返回与片段关联的当前首选项管理器
getPreferenceScreen()
返回根PreferenceScreen
,即首选项xml文件(preferences.xml)片段中使用的根首选项屏幕。核心区别在于它们的名称,首选项管理器
授予开发人员对不同功能的访问权限,以管理共享引用
,例如检索当前首选项值的映射或设置用户首选项。设置为其默认值<代码>首选项屏幕处理显示用户首选项屏幕的操作,以便用户可以为其分配值。有时,这意味着在具有其他首选项的屏幕上显示一个列表项,单击时会打开另一个具有更多首选项的屏幕,就像嵌套了PreferenceScreen
s一样
您的问题意味着您认为PreferenceManager.getSharedReferences()
和PreferenceScreen.getSharedReferences()
之间有区别,但根据源代码,它们是相同的
首选项屏幕
:
public SharedPreferences getSharedPreferences() {
if (mPreferenceManager == null) {
return null;
}
return mPreferenceManager.getSharedPreferences();
}
因此PreferenceManager
和PreferenceScreen
是不同的实体,但是那些方法返回的SharedReference
应该是同一个对象,因为PreferenceScreen
从PreferenceManager
调用方法。我希望这就是你一直在寻找的答案
如果您有选择的话,可以使用PreferenceManager.getSharedReferences()
,它更为明显,而且内部方法调用更少
有趣的事实:
PreferenceFragment
:
public PreferenceManager getPreferenceManager() {
return mPreferenceManager;
}
public PreferenceScreen getPreferenceScreen() {
return mPreferenceManager.getPreferenceScreen();
}
从API中我所了解的情况来看,屏幕似乎更为具体,并不能真正保证出现,而Manager应该更经常地出现+一个好问题!为了澄清关于新的悬赏,除了Shurti和JoseLSegura已经回答的问题外,你还想知道什么。Shurti的回答主要是从API文档中复制/粘贴的,我已经读了好几遍了。何塞的答案更符合我的要求,但似乎不够权威。我只是想让其他人也参与进来。谢谢,这正是我想要的答案。我甚至没有想过要看Android的源代码。请分享源代码链接或帮助了解如何探索?在PreferenceScreen.java中没有名为GetSharedReferences()的方法。我已经从下面的链接探索。在这里找到
public PreferenceManager getPreferenceManager() {
return mPreferenceManager;
}
public PreferenceScreen getPreferenceScreen() {
return mPreferenceManager.getPreferenceScreen();
}