【问题标题】:Fragment onHiddenChanged not called片段 onHiddenChanged 未调用
【发布时间】:2012-03-24 07:49:36
【问题描述】:

我最近在我的应用程序中添加了 Fragments。对于一个新的应用程序,我需要得到 显示我的片段后立即通知。所以我可以尽快做一些计算 片段再次显示。

我的 Fragment 与 TabIndicator 一起使用,它只是一个使用的 FragmentClass 几次。

这是正常的标准覆盖类:

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
}

【问题讨论】:

    标签: android fragment android-4.0-ice-cream-sandwich hidden


    【解决方案1】:

    我有同样的问题。

    我对片段 (Building a Flexible UI) 使用了标准指导实践工作。 我有两个片段(ListItemsFragment 和 InfoItemFragment)。 当使用正常屏幕尺寸时,我将 ListItemsFragment 替换为 InfoItemFragment 和 onHiddenChanged 方法不会自动调用。

    FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction();
    mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem");
    mFragmentTransaction.addToBackStack(null);
    mFragmentTransaction.commit();
    

    我认为我们必须调用隐藏方法 FragmentTransaction。例如:

        ListItemsFragment  mListItemsFragment;
        FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction();
        mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem");
        if (mListItemsFragment != null) {
            mFragmentTransaction.hide(mListItemsFragment);
        }
        mFragmentTransaction.addToBackStack(null);
        mFragmentTransaction.commit();
    

    现在 onHiddenChanged 方法工作正常。当用户再次单击返回按钮时,mListItemsFragment 会显示并且方法 onHiddenChanged 会自动调用。

    在文档中说: 每当片段改变状态时都会调用它

    我认为我们必须手动更改值然后调用方法。

    【讨论】:

      【解决方案2】:

      还在寻找答案?第一次显示片段时不会调用 onHiddenChanged 。只有当它改变状态时。

      来自文档:

      当片段的隐藏状态(由 isHidden() 返回)改变时调用。片段开始时没有隐藏;每当片段改变状态时,都会调用它。

      【讨论】:

      • 感谢您的回答,但从未调用过该方法。所以我解决了这个问题,因为我的 viewpager 有一个监听器。在这个监听器中,我调用 onHidden-Changed 方法。愚蠢,但是,它现在可以工作了。
      • 它从未被调用过。
      【解决方案3】:

      您可以使用 setUserVisibleHint 方法来解决一些类似的问题。希望对你有帮助。

      @Override
      public void setUserVisibleHint(boolean isVisibleToUser) {
          super.setUserVisibleHint(isVisibleToUser);
          if (isVisibleToUser) {
              // Do some your work
          } else {
              // Do your Work
          }
      }
      

      【讨论】:

      • 已弃用!
      • 你的 SDK 版本是多少?安卓X?
      • compileSdkVersion 28, minSdkVersion 17 & AndroidX
      【解决方案4】:

      如果您使用 hide() 和 show() 隐藏或显示您的片段,任何生命周期方法都不起作用。所以 setUserVisibleHint() 。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-20
        • 2015-12-12
        • 2021-10-19
        • 2011-09-03
        • 2019-12-05
        相关资源
        最近更新 更多