Xåp*_* - 37 android android-preferences android-sharedpreferences
我已经实现了我自己的PreferenceFragment子类(在此详述),并希望在其中监听偏好更改.PreferenceFragment为您提供了两种执行此操作的方法:
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
Run Code Online (Sandbox Code Playgroud)
和
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
Run Code Online (Sandbox Code Playgroud)
应该使用哪一个?有什么不同?我真的不明白Android文档中的区别.
Dan*_*son 18
核心区别在于它们的名称,PreferenceManger允许开发人员访问不同的功能以进行管理SharedPreferences,例如检索当前首选项值的映射或设置用户首选项.到他们的默认值.PreferenceScreen处理显示用户首选项的屏幕,以便用户可以为它们分配值.有时这意味着在屏幕上显示具有其他首选项的列表项,这会在单击时打开另一个具有更多首选项的屏幕,就像PreferenceScreen嵌套s 时的情况一样.
你的问题意味着你认为什么PreferenceManager.getSharedPreferences()和PreferenceScreen.getSharedPreferences()做什么之间存在差异,但根据源代码,它们是相同的.
PreferenceScreen:
public SharedPreferences getSharedPreferences() {
if (mPreferenceManager == null) {
return null;
}
return mPreferenceManager.getSharedPreferences();
}
Run Code Online (Sandbox Code Playgroud)
所以PreferenceManger和PreferenceScreen是不同的实体,但SharedPreference那些方法返回应该是同一个对象,因为PreferenceScreen从中调用方法PreferenceManager.我希望这是你一直在寻找的答案.
如果你有一个选择,PreferenceManager.getSharedPreferences()那就更明显,内部的方法调用也少一些.
有趣的事实:
PreferenceFragment:
public PreferenceManager getPreferenceManager() {
return mPreferenceManager;
}
public PreferenceScreen getPreferenceScreen() {
return mPreferenceManager.getPreferenceScreen();
}
Run Code Online (Sandbox Code Playgroud)
Jos*_*ura 16
第一个从中获取共享首选项PreferenceManager.第二个,来自PreferenceScreen,从Preference类继承此方法.
我认为这不是功能差异,因为两者都可能返回SharedPreferences对象的相同实例,但我认为使用第一个实例(使用PreferenceManager而不是PreferenceScreen)更清楚.
Shr*_*uti 13
PreferenceScreen 在此处查看domentation
PreferenceScreen类可以出现在两个地方:
PreferenceManager 在这里查看文档:
差异:
getPreferenceManager () 返回与片段关联的当前首选项管理器.
getPreferenceScreen ()PreferenceScreen从首选项xml文件(preferences.xml)返回片段中使用的根,即根首选项屏幕.
| 归档时间: |
|
| 查看次数: |
7341 次 |
| 最近记录: |