我的程序有 6 个片段:Fragment1、Fragment2、....->Fragment6。
我使用 add() 和 replace() 语句在片段之间切换并跟踪它们的生命周期。
Fragment1添加Fragment2添加Fragment3添加Fragment4添加Fragment5替换Fragment6
显示它们的生命周期的日志猫(我在 onCreate、onCreateView、onDestroyView、onDestroy 中有一些 printf 点用于跟踪)
标签 __ _ __ _ __ _ __ _ __ 文字
片段1_ _ __ _ ___ _onCreate
片段1_ _ __ _ ___ _onCreateView
片段1_ _ __ _ ___ _添加片段2
片段2_ _ __ _ ___ _onCreate
片段2_ _ __ _ ___ _onCreateView
片段2_ _ __ _ ___ _添加片段3
片段3_ _ __ _ ___ _onCreate
片段3_ _ __ _ ___ _onCreateView
片段3_ _ __ _ ___ _添加片段4
片段4_ _ __ _ ___ _onCreate
片段4_ _ __ _ ___ _onCreateView
片段4_ _ __ _ ___ _添加片段5
片段5_ _ __ _ ___ _onCreate
片段5_ _ __ _ ___ _onCreateView
片段5 __ _ __ _ _ 替换 Fragment6
片段1 __ _ __ _ _ onDestroyView
片段3 __ _ __ _ _ onDestroyView
片段5 __ _ __ _ _ onDestroyView
片段6_ _ __ _ ___ _onCreate
片段6_ _ __ _ ___ _onCreateView
我的问题:
为什么Fragment5 被 Fragment6替换后, Fragment1 & 3 &5 被破坏了他们的视图?
Fragment2 & 4 发生了什么?
为什么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();
}