【发布时间】:2014-10-24 18:15:26
【问题描述】:
在我的 MainActivity onCreate 方法中,我将 MainFragment 添加到 FrameLayout main_view_container:
if (savedInstanceState == null) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.main_view_container, new MainFragment(), MainFragment.FRAGMENT_TAG);
fragmentTransaction.commit();
}
在我的 MainFragment 中,我有 ViewPager 和 FragmentStatePagerAdapter,每个页面都是 Fragment 本身(PagerFragment)。
然后在单击按钮后的某个时刻,我想用另一个片段 (ReplacementFragment) 替换整个 MainFragment,并将事务添加到后台堆栈,以便在按下后退按钮时返回 MainFragment。所以我做了以下事情:
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.main_view_container, new ReplacementFragment(), null);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
在我提交事务后 MainFragment 停止并调用 onDestroyView() 但 PagerFragments 完全没有任何反应(在 MainFragment 的 ViewPager 中)没有事件单个 onStop() 调用。然后当我返回时,MainFragment 的视图在 onCreateView() 中重新创建,这也意味着 ViewPager 的新实例,但 PagerFragments 仍然没有。
这怎么可能在父 Fragment 中调用 onDestroyView 而在子 Fragment 中却没有?
【问题讨论】:
-
在 MainFragment 中创建寻呼机适配器时是否使用了 getChildFragmentManager()?
-
你为什么不打开一个新的活动而不是尝试用另一个替换你的整个 MainFragment?
-
@cYrixmorten 不,我没有,我使用了 Activity 的 FragmentManager,我想这就是为什么不管理子片段的原因。这解决了我的问题,谢谢!
-
@Karakuri 我可以但想知道答案以用于教育目的。
-
@Karakuri 如果使用导航抽屉,那么这就是要走的路
标签: android android-fragments android-viewpager