我(这里详细)来实现自己的preferenceFragment子类,并希望监听preference在它的变化。 preferenceFragment为您提供了这样的方式:
get$p$pferenceManager().getShared$p$pferences().registerOnShared$p$pferenceChangeListener(this);和
get$p$pferenceScreen().getShared$p$pferences().registerOnShared$p$pferenceChangeListener(this);
哪一个应该被使用?有什么不同?我真的不明白的distinction在Android文档进行。
解决方案最核心的区别是他们的名字, preferenceManger
授权访问不同的功能给开发者管理共享preferences
,如检索当前preference值的地图或设置用户preferences。为默认值。 preferenceScreen
处理显示的用户preferences屏幕,以便用户可以为其赋值。有时,这意味着显示与其他preferences屏幕上的列表项,打开另一个屏幕更preferences点击时,就属于这种情况时, preferenceScreen
s的嵌套。
您的问题意味着,你认为有什么之间 preferenceManager.getShared preferences()
和 $ P $的差异pferenceScreen.getShared preferences()
的做法,但根据源$ C $ C,它们是相同的。
preferenceScreen
:
公开共享preferences getShared preferences(){
如果(M preferenceManager == NULL){
返回null;
}
返回米preferenceManager.getShared preferences();
}
因此, preferenceManger
和 preferenceScreen
是不同的实体,但共享preference
这些方法的返回值应该是相同的对象,因为 preferenceScreen
要求从 preferenceManager 。我希望这是你一直在寻找的答案。
如果你有一个选择,去与 preferenceManager.getShared preferences()
,这是比较明显的,一个方法调用内部少了。
有趣的事实:
preferenceFragment
:
公共preferenceManager得到preferenceManager(){
返回米preferenceManager;
}
公共preferenceScreen的get preferenceScreen(){
返回米preferenceManager.get preferenceScreen();
}
I've implemented my own PreferenceFragment subclass (detailed here), and want to listen for preference changes within it. PreferenceFragment provides you with two ways of doing this:
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
and
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
Which one should be used? What's the difference? I don't really understand the distinction made in the Android docs.
解决方案The core difference is in their names, PreferenceManger
grants access to different functionalities to the developer for managing SharedPreferences
, such as retrieving the map of current preference values or setting user preferences. to their default values. PreferenceScreen
handles displaying a screen of user preferences, so that the user can assign values to them. Sometimes this means displaying a list item on a screen with other preferences, that opens another screen with more preferences when clicked, as is the case when PreferenceScreen
s are nested.
Your question implies that you think there is a difference between what PreferenceManager.getSharedPreferences()
and PreferenceScreen.getSharedPreferences()
does, but according to the source code, they are identical.
PreferenceScreen
:
public SharedPreferences getSharedPreferences() {
if (mPreferenceManager == null) {
return null;
}
return mPreferenceManager.getSharedPreferences();
}
So the PreferenceManger
and PreferenceScreen
are different entities, but the SharedPreference
those method return should be the same object, since PreferenceScreen
calls the method from PreferenceManager
. I hope that is the answer you've been seeking.
If you have a choice, go with PreferenceManager.getSharedPreferences()
, it's more obvious and one fewer method call internally.
Fun fact:
PreferenceFragment
:
public PreferenceManager getPreferenceManager() {
return mPreferenceManager;
}
public PreferenceScreen getPreferenceScreen() {
return mPreferenceManager.getPreferenceScreen();
}
上一篇:如何解决"无效的资源目录名称和QUOT;,资源和QUOT;紧缩"资源、如何解决、名称、目录
下一篇:"没有安装下面的SDK组件:SYS-IMG 86插件,google_apis - 谷歌-22和插件,google_apis - 谷歌 - 22 QUOT;插件、没有安装、组件、SYS