【发布时间】:2017-12-25 14:01:31
【问题描述】:
我有 2 个活动都从 AppCompatActivity 扩展如下
MainActivity - 托管通过FragmentPagerAdapter附加的3个片段
AboutActivity - 独立活动,不使用片段
问题 : MainActivity 加载完所有 3 个 Fragment 后,用户从 MainActivity 的 optionMenu 中打开 About Activity。在 AboutActivity 中,用户单击 Toolbar 后退按钮,再次返回 MainActivity。
这就是问题所在,MainActivity 中的所有片段都与 Activity 本身一起被销毁,并且它们被重新创建。
我已经捕获了以上 3 个步骤的日志,并在下面复制。
我在 stackoverflow 上找到了similar question,但没有发现它相关,因为我使用的是 FragmentPagerAdapter,而这个问题是基于片段事务的
日志 - App Started 和 MainActivity 加载了 3 个 Fragment,List Fragment 显示了 3 次,因为 ListFragment 继承了 3 个 Fragment。根据下面的日志应用程序行为似乎很好。
I/System.out: MainActivity.onAttachFragment ReportFragment{2a7b515 #0 android.arch.lifecycle.LifecycleDispatcher.report_fragment_tag}
I/System.out: MainActivity.onCreate
I/System.out: MainFragmentPageAdapter.MainFragmentPageAdapter
I/System.out: MainActivity.onStart
I/System.out: MainActivity.onResume
I/System.out: MainActivity.onResumeFragments
I/System.out: MainFragmentPageAdapter.getItem
I/System.out: MainFragmentPageAdapter.getItem
I/System.out: MainFragmentPageAdapter.getItem
I/System.out: ListFragment.onAttach context = com.global.MainActivity@99b50ff, activity = com.global.MainActivity@99b50ff
I/System.out: MainActivity.onAttachFragment ListFragment{894a792 #0 id=0x7f0901a3 android:switcher:2131296675:0}
I/System.out: ListFragment.onCreate
I/System.out: ListFragment.onAttach context = com.global.MainActivity@99b50ff, activity = com.global.MainActivity@99b50ff
I/System.out: MainActivity.onAttachFragment ListFragment{720b78c #1 id=0x7f0901a3 android:switcher:2131296675:1}
I/System.out: ListFragment.onCreate
I/System.out: ListFragment.onAttach context = com.global.MainActivity@99b50ff, activity = com.global.MainActivity@99b50ff
I/System.out: MainActivity.onAttachFragment ListFragment{fe7c078 #2 id=0x7f0901a3 android:switcher:2131296675:2}
I/System.out: ListFragment.onCreate
I/System.out: ListFragment.onCreateView
I/System.out: ListFragment.onViewStateRestored
I/System.out: ListFragment.onStart
I/System.out: ListFragment.onResume
I/System.out: ListFragment.onCreateView
I/System.out: ListFragment.onViewStateRestored
I/System.out: ListFragment.onCreateView
I/System.out: ListFragment.onViewStateRestored
I/System.out: ListFragment.onStart
I/System.out: ListFragment.onResume
I/System.out: ListFragment.onStart
I/System.out: ListFragment.onResume
用户从选项菜单中选择关于,并且关于活动已启动,此活动不使用任何片段。根据下面的日志,应用行为似乎很好。
I/System.out: ListFragment.onPause
I/System.out: ListFragment.onPause
I/System.out: ListFragment.onPause
I/System.out: MainActivity.onPause
I/System.out: AboutActivity.onAttachFragment ReportFragment{9b431e0 #0 android.arch.lifecycle.LifecycleDispatcher.report_fragment_tag}
I/System.out: AboutActivity.onCreate
I/System.out: AboutActivity.onStart
I/System.out: AboutActivity.onResume
I/System.out: AboutActivity.onResumeFragments
I/System.out: AboutActivity.onAttachedToWindow
I/System.out: ListFragment.onSaveInstanceState
I/System.out: ListFragment.onSaveInstanceState
I/System.out: ListFragment.onSaveInstanceState
I/System.out: ListFragment.onStop
I/System.out: ListFragment.onStop
I/System.out: ListFragment.onStop
I/System.out: MainActivity.onStop
用户点击返回按钮,应该再次回到 MainActivity。它确实发生了,但在此之前 MainActivity 上的所有片段都被销毁,MainActivity 本身被销毁,并且片段和活动都被重新创建。 不确定是什么导致 MainActivity 及其下的 3 个片段被破坏和重新创建。 (这是我正在寻找解决方案的问题)
I/System.out: AboutActivity.onPause
I/System.out: ListFragment.onDestroy
I/System.out: ListFragment.onDetach
I/System.out: ListFragment.onDestroy
I/System.out: ListFragment.onDetach
I/System.out: ListFragment.onDestroy
I/System.out: ListFragment.onDetach
I/System.out: MainActivity.onDestroy
I/System.out: MainActivity.onAttachFragment ReportFragment{a36b9c6 #0 android.arch.lifecycle.LifecycleDispatcher.report_fragment_tag}
I/System.out: MainActivity.onCreate
I/System.out: MainFragmentPageAdapter.MainFragmentPageAdapter
I/System.out: MainActivity.onStart
I/System.out: MainActivity.onResume
I/System.out: MainActivity.onResumeFragments
I/System.out: MainFragmentPageAdapter.getItem
I/System.out: MainFragmentPageAdapter.getItem
I/System.out: MainFragmentPageAdapter.getItem
I/System.out: ListFragment.onAttach context = com.global.MainActivity@4adb3a1, activity = com.global.MainActivity@4adb3a1
I/System.out: MainActivity.onAttachFragment ListFragment{7a21b5a #0 id=0x7f0901a3 android:switcher:2131296675:0}
I/System.out: ListFragment.onCreate
I/System.out: ListFragment.onAttach context = com.global.MainActivity@4adb3a1, activity = com.global.MainActivity@4adb3a1
I/System.out: MainActivity.onAttachFragment ListFragment{5f7418b #1 id=0x7f0901a3 android:switcher:2131296675:1}
I/System.out: ListFragment.onCreate
I/System.out: ListFragment.onAttach context = com.global.MainActivity@4adb3a1, activity = com.global.MainActivity@4adb3a1
I/System.out: MainActivity.onAttachFragment ListFragment{cc17268 #2 id=0x7f0901a3 android:switcher:2131296675:2}
I/System.out: ListFragment.onCreate
I/System.out: ListFragment.onCreateView
I/System.out: ListFragment.onViewStateRestored
I/System.out: ListFragment.onStart
I/System.out: ListFragment.onResume
I/System.out: ListFragment.onCreateView
I/System.out: ListFragment.onViewStateRestored
I/System.out: ListFragment.onCreateView
I/System.out: ListFragment.onViewStateRestored
I/System.out: ListFragment.onStart
I/System.out: ListFragment.onResume
I/System.out: ListFragment.onStart
I/System.out: ListFragment.onResume
I/System.out: AboutActivity.onStop
I/System.out: AboutActivity.onDestroy
I/System.out: AboutActivity.onDetachedFromWindow
【问题讨论】:
-
拜托,您能更具体地解释一下您的问题吗?
-
分享你创建片段的代码
-
@MeknessiHamida - 分享了代码、日志并更新了更多描述。
-
@TarlanAhad - 请立即查看
-
FragmentStatePagerAdapter 在片段数量有限时得到更好的支持。
标签: android android-fragments fragment