似乎我无法找出如何解释PreferenceFragment::onPreferenceTreeClick(...)的返回值。在文档中没有提到如何使用返回值(Eclipse表示“@inheritDoc”而Android HTML reference有一个空体)。
我尝试在PreferenceActivity::onPreferenceTreeClick(...)上弃用的API中进行查找,但它说的是,它已被弃用。
此外,我尝试从方法中返回true和false,但在我看来它对任何事都没有影响。
那么 - 如果有人能够如此友善地告诉我返回值的变化是什么?
答案 0 :(得分:15)
调用它的代码位于Preference#performClick(PreferenceScreen preferenceScreen)
,它执行以下操作:
PreferenceManager preferenceManager = getPreferenceManager();
if (preferenceManager != null) {
PreferenceManager.OnPreferenceTreeClickListener listener = preferenceManager
.getOnPreferenceTreeClickListener();
if (preferenceScreen != null && listener != null
&& listener.onPreferenceTreeClick(preferenceScreen, this)) {
return;
}
}
if (mIntent != null) {
Context context = getContext();
context.startActivity(mIntent);
}
返回true
将立即返回false
,将检查是否为此Intent
和start the specified Activity
设置了PreferenceScreen
。
如果您return super.onPreferenceTreeClick(preferenceScreen, preference)
,还会导致PreferenceFragment
的以下代码运行
if (preference.getFragment() != null &&
getActivity() instanceof OnPreferenceStartFragmentCallback) {
return ((OnPreferenceStartFragmentCallback)getActivity()).onPreferenceStartFragment(
this, preference);
}
return false;
这个检查是否有Fragment
to be shown。如果不是Preference
,则会查找Intent
。
偏好设置可以从Intent
s或Fragment
开始。返回值的含义是
true
:没有任何反应,片段和意图都会被忽略false
:忽略片段,执行意图super.onPreference..
:首先尝试片段,然后尝试第二个 return false;
或return super.onPreferenceTreeClick(...)
通常应该是正确的回归。返回值的含义大致是“如果存在则按意图启动活动?”。如果您已指定意图但不想开始活动,则应返回true
。在大多数其他情况下并不重要,因为如果您指定了该意图,则很少处理点击。