PreferenceFragment - getPreferenceManager()和getPreferenceScreen()之间的区别?

时间:2012-11-29 03:26:51

标签: android android-preferences android-sharedpreferences

我已经实现了自己的PreferenceFragment子类(详细here),并希望在其中监听偏好更改。 PreferenceFragment为您提供了两种方法:

getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

应该使用哪一个?有什么不同?我真的不明白distinction made in the Android docs

2 个答案:

答案 0 :(得分:16)

第一个获取PreferenceManager的共享偏好设置。第二个来自PreferenceScreen,从Preference类继承此方法。

我认为这不是功能差异,因为两者都可能返回SharedPreferences个对象的相同实例,但我认为使用第一个对象更清楚(使用PreferenceManager代替{{1} }})。

答案 1 :(得分:13)

PreferenceScreen 请参阅管理here

PreferenceScreen类可以出现在两个地方:

  • 当PreferenceActivity指向此时,它将用作根和 未显示(仅显示包含的首选项)。
  • 当它出现在另一个首选项层次结构中时,会显示和 作为另一个偏好屏幕的门户(通过 显示另一个偏好屏幕作为对话框或通过 来自getIntent()的startActivity(android.content.Intent)。该 此PreferenceScreen的子项不会显示在屏幕中 此首选项屏幕显示在。相反,将显示一个单独的屏幕 单击此首选项时显示。

PreferenceManager 请参阅文档here

差异

getPreferenceManager ()返回与片段关联的当前首选项管理器。

getPreferenceScreen ()返回根PreferenceScreen,即来自首选项xml文件(preferences.xml)的片段中使用的根首选项屏幕。