PreferenceFragment :: onPreferenceTreeClick返回值 - 它做什么?

时间:2013-05-17 08:22:39

标签: android

似乎我无法找出如何解释PreferenceFragment::onPreferenceTreeClick(...)的返回值。在文档中没有提到如何使用返回值(Eclipse表示“@inheritDoc”而Android HTML reference有一个空体)。

我尝试在PreferenceActivity::onPreferenceTreeClick(...)上弃用的API中进行查找,但它说的是,它已被弃用。

此外,我尝试从方法中返回true和false,但在我看来它对任何事都没有影响。

那么 - 如果有人能够如此友善地告诉我返回值的变化是什么?

1 个答案:

答案 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,将检查是否为此Intentstart 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

TLDR

偏好设置可以从Intent s或Fragment开始。返回值的含义是

  • true:没有任何反应,片段和意图都会被忽略
  • false:忽略片段,执行意图
  • super.onPreference..:首先尝试片段,然后尝试第二个

return false;return super.onPreferenceTreeClick(...)通常应该是正确的回归。返回值的含义大致是“如果存在则按意图启动活动?”。如果您已指定意图但不想开始活动,则应返回true。在大多数其他情况下并不重要,因为如果您指定了该意图,则很少处理点击。