FragmentManager 知道片段何时恢复
FragmentManager know when a fragment resumed
我有一个 FragmentManager
,我用它来将 Fragments
添加到 backStack
。
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
,我就会弹出一个,但我需要知道上一个片段何时再次显示。
看来onResume
在这里不适用。我应该使用另一种方法来了解 FragmentManger
中已经存在的 Fragment
何时出现吗?
当你弹出你的片段时,你可以通过你提供的标签从片段管理器中获取你的另一个片段,并在你的片段中调用一个public方法。
YourFragment fragment = (YourFragment) getFragmentManager().findFragmentByTag("FRAGMENT_TAG");
if (fragment != null) {
fragment.callMethod();
}
您可以通过起诉标签来检查标签是否可见且不为空
MyFragment myFragment = (MyFragment)getFragmentManager().findFragmentByTag("MY_FRAGMENT");
if (myFragment != null && myFragment.isVisible()) {
// add your code here
}
已接受的答案无法工作:在某些情况下,getFragmentManager 可能 return 为 null(即 Activity 已被销毁)
现在最好使用 Lifecycle,如下例所示:
if( getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED) )
{
// Do whatever you need
}
我有一个 FragmentManager
,我用它来将 Fragments
添加到 backStack
。
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
,我就会弹出一个,但我需要知道上一个片段何时再次显示。
看来onResume
在这里不适用。我应该使用另一种方法来了解 FragmentManger
中已经存在的 Fragment
何时出现吗?
当你弹出你的片段时,你可以通过你提供的标签从片段管理器中获取你的另一个片段,并在你的片段中调用一个public方法。
YourFragment fragment = (YourFragment) getFragmentManager().findFragmentByTag("FRAGMENT_TAG");
if (fragment != null) {
fragment.callMethod();
}
您可以通过起诉标签来检查标签是否可见且不为空
MyFragment myFragment = (MyFragment)getFragmentManager().findFragmentByTag("MY_FRAGMENT");
if (myFragment != null && myFragment.isVisible()) {
// add your code here
}
已接受的答案无法工作:在某些情况下,getFragmentManager 可能 return 为 null(即 Activity 已被销毁)
现在最好使用 Lifecycle,如下例所示:
if( getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED) )
{
// Do whatever you need
}