tha*_*hnh 19 android android-fragments fragment-lifecycle
我的程序有6个片段:Fragment1,Fragment2,....-> Fragment6.
我使用add()和replace()语句在片段之间切换并跟踪它们的生命周期.
Fragment1 添加 Fragment2 添加 Fragment3 添加 Fragment4 添加 Fragment5 替换 Fragment6
log-cat显示了它们的生命周期(我在onCreate,onCreateView,onDestroyView,onDestroy中有一些printf-points用于跟踪)
标签 __ _ __ _ __ _ __ _ __ 文字
Fragment1_ _ __ _ ___ _onCreate
Fragment1_ _ __ _ ___ _onCreateView
Fragment1_ _ __ _ ___ _add Fragment2
Fragment2_ _ __ _ ___ _onCreate
Fragment2_ _ __ _ ___ _onCreateView
Fragment2_ _ __ _ ___ _add Fragment3
Fragment3_ _ __ _ ___ _onCreate
Fragment3_ _ __ _ ___ _onCreateView
Fragment3_ _ __ _ ___ _add Fragment4
Fragment4_ _ __ _ ___ _onCreate
Fragment4_ _ __ _ ___ _onCreateView
Fragment4_ _ __ _ ___ _add Fragment5
Fragment5_ _ __ _ ___ _onCreate
Fragment5_ _ __ _ ___ _onCreateView
Fragment5 __ _ __ _ _ 替换Fragment6
片段1 __ _ __ _ _ onDestroyView
Fragment3 __ _ __ _ _ onDestroyView
Fragment5 __ _ __ _ _ onDestroyView
Fragment6_ _ __ _ ___ _onCreate
Fragment6_ _ __ _ ___ _onCreateView
我的问题:
为什么 Fragment5被Fragment6 取代后,Fragment1&3&5被破坏了他们的视野?
什么是与Fragment2和4 happending?
为什么 Fragment2和4没有被破坏他们作为Fragment1&3&5的观点?
在调用add()和replace()方法时,请帮助我完全理解片段的生命周期.
更新我的addFragment和replaceFragment方法:
public void addFragment(Fragment fromFragment, Fragment toFragment) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.container,toFragment, toFragment.getClass().getName());
transaction.hide(fromFragment);
transaction.addToBackStack(toFragment.getClass().getName());
transaction.commit();
}
public void replaceFragment(Fragment fromFragment, Fragment toFragment) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container,toFragment, toFragment.getClass().getName());
transaction.hide(fromFragment);
transaction.addToBackStack(toFragment.getClass().getName());
transaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您使用a FragmentTransaction来隐藏片段,那么它仍然可以处于其生命周期的运行状态,但是它的UI已经从窗口中分离出来,因此它不再可见.因此,您可以在技术上仍然与片段进行交互,并在以后需要时重新附加其UI.如果更换片段,那么你实际上是拉出来的容器,它会通过所有拆机事件的生命周期(onPause,onStop,等),如果由于某种原因,你需要的片段再次,你将不得不将其插入回到容器中,让它再次运行所有初始化.
当您替换时,您将换掉ViewGroup R.id.container新的Fragment(6)中的所有片段(1,2,3,4,5 ).一旦碎片被移除,它们将被销毁.当被破坏时,他们会调用该onDestroyView()方法.
关于2和4的问题,我不确定.您是否能够发布更多写入logcat的代码?
| 归档时间: |
|
| 查看次数: |
15173 次 |
| 最近记录: |