FragmentManager如何知道一个fragment被恢复了?

3

我有一个 FragmentManager,我用它来添加 FragmentsbackStack

FragmentTransaction ft = getFragmentManager().beginTransaction();
PUCCoursesSubjectList detail = new PUCCoursesSubjectList();
detail.item = item;

ft.add(R.id.container_frame, detail, "courses_detail");
ft.addToBackStack(null);
ft.commit();

如果我在堆栈上有几个 Fragments,我弹出其中一个,但我需要知道先前的 fragment 何时再次显示。

似乎 onResume 不适用于此。我应该使用哪种方法来知道已经存在于 FragmentManager 中的 Fragment 何时出现?

3个回答

4

被接受的答案可能无法使用:在某些情况下(即Activity已被销毁),getFragmentManager可能返回null

现在更好的方法是使用Lifecycle,就像下面的例子一样:

  if( getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED) )
  {
      // Do whatever you need
  }

我可以知道在哪里使用这段代码吗?我的意思是片段还是活动? - Ninja
在两者中,只需使用androidx版本。 - ARLabs

1
当你弹出你的片段时,你可以通过提供的标记从片段管理器中获取你的其他片段,并在你的片段中调用一个公共方法。
YourFragment fragment = (YourFragment) getFragmentManager().findFragmentByTag("FRAGMENT_TAG");

if (fragment != null) {
   fragment.callMethod();
}

我应该从哪里调用它?从我正在弹出的Fragment中的方法吗?从onDestroy()中? - Nic Hubbard
取决于您在何处需要它。只要您可以访问上下文(托管Fragment的Activity),您就可以随时调用它。在您的情况下,您提到弹出了一个Fragment,您可以在那里调用它吗? - Marko
是的,在弹出的Fragment的onDestroy()方法中测试了一下,它完美地工作了!谢谢! - Nic Hubbard

0

您可以通过标签检查它是否可见且不为空,使用该标签

MyFragment myFragment = (MyFragment)getFragmentManager().findFragmentByTag("MY_FRAGMENT");
if (myFragment != null && myFragment.isVisible()) {
   // add your code here
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接