gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:09:28 29 4
gpt4 key购买 nike

我已经实现了我自己的 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();
}

所以 PreferenceMangerPreferenceScreen 是不同的实体,但是 SharedPreference 这些方法返回应该是同一个对象,因为 PreferenceScreen 调用 PreferenceManager 中的方法。我希望这就是你一直在寻找的答案。

如果您有选择,请使用 PreferenceManager.getSharedPreferences(),它更明显且内部方法调用更少。

有趣的事实:

PreferenceFragment:

public PreferenceManager getPreferenceManager() {
return mPreferenceManager;
}

public PreferenceScreen getPreferenceScreen() {
return mPreferenceManager.getPreferenceScreen();
}

关于android - PreferenceFragment - getPreferenceManager() 和 getPreferenceScreen() 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13618335/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com