【问题标题】:How to know Fragment showed up on the screen [Not in the PagerAdapter]?如何知道 Fragment 出现在屏幕上 [不在 PagerAdapter 中]?
【发布时间】:2017-05-02 22:31:03
【问题描述】:

我很难弄清楚Fragment 何时实际出现在屏幕上,并在其他Fragment 替换它时隐藏。意味着我需要知道可以提供帮助的方法。

到目前为止,我已经尝试过以下方法。这些方法甚至没有调用。因为我没有在PagerAdaper 中使用Fragments(根据SO 答案)。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
}

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

@Override
public void setMenuVisibility(boolean menuVisible) {
    super.setMenuVisibility(menuVisible);
}

最后我尝试了

@Override
public void onAttach(Context context) {
    super.onAttach(context);
}

@Override
public void onDetach() {
    super.onDetach();
}

他们都在调用,但这里的问题是 onDetach 在第二个 Fragment 的 onAttach 之后调用。

所以不知何故,我一无所有。

感谢阅读!

【问题讨论】:

    标签: android fragment visibility


    【解决方案1】:

    在 firstFragment 上使用 onDetach,在第二个 Fragment 上使用 onActivityCreated。

    【讨论】:

    • 不错的收获!但问题是onStop 在下一个Fragment's onAttach 方法之后被调用。
    • 在第一个片段上使用 onDetach,在第二个片段上使用 onActivityCreated。onActivityCreated 将在第一个片段分离后调用。
    • 是的,它对我有用,更新你的答案我会接受的!干杯!!
    【解决方案2】:

    Fragment的生命周期回调中可以使用isHidden()知道当前状态的显示。

    状态也将在onHiddenChange(boolean)method 中调用。当附加一个Fragment时,它的默认状态是SHOW,所以如果要调用onHiddenChange(boolean),前提是在使用事务时要显式调用show()/hide()

    例如: getSupportFragmentManager().benginTranscation.add(...).show().commit();

    【讨论】:

      【解决方案3】:

      可能下面的方法对你有帮助。它在视图可见后调用。

      @Override
          public void onViewCreated(View view, Bundle savedInstanceState) {
              super.onViewCreated(view, savedInstanceState);
          }
      

      试试下面的代码来隐藏片段。

      final Fragment hideFragment = getFragmentManager().findFragmentById(R.id.container);
              getFragmentManager()
                      .beginTransaction()
                      .add(R.id.container, fragment, fragment.getClass().getSimpleName())
                      **.hide(hideFragment)**
                      .addToBackStack(hideFragment.getClass().getSimpleName())
                      .commit();
      

      当你使用 .hide 方法时,下面的方法肯定会调用。

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

      【讨论】:

      • 要知道Show 状态很好,但是Hide 状态呢?
      • 如果您使用 transaction.add() 和 transaction.hide() 方法,那么请确保 @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); } 这个方法会调用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      相关资源
      最近更新 更多