android-fragments - add() & replace() 与 fragment 生命周期之间的差异

  显示原文与译文双语对照的内容
85 3

我的程序有 6个 Fragments:Fragment1,Fragment2,。-> Fragment6.

我使用 add() 和 replace() 语句在 fragment 之间进行 switch,并跟踪它们的生命周期。

添加 Fragment2英镑添加 Fragment3添加英镑添加 Fragment5 replace Fragment6

显示它们生命周期的日志猫( 我在 onCreate 。onCreateView 。onDestroyView 。onDestroy中都有一些用于跟踪的printf点)

标签英镑 __ __ _ __ _ __ _ __ Text Text Text Text

Fragment1_ __ ___

Fragment1_ __ ___

Fragment1_ __ ___

Fragment2_ __ ___

Fragment2_ __ ___

Fragment2_ __ ___

Fragment3_ __ ___

Fragment3_ __ ___

Fragment3_ __ ___

Fragment4_ __ ___

Fragment4_ __ ___

Fragment4_ __ ___

Fragment5_ __ ___

Fragment5_ __ ___

英镑 Fragment5__ __ _ _ replace replace替换 Fragment6

英镑Fragment1英镑__ __ onDestroyView

英镑Fragment3英镑__ __ onDestroyView

英镑Fragment5英镑__ __ onDestroyView

Fragment6_ __ ___

Fragment6_ __ ___

我的问题:

Fragment5用Fragment6替换之后为什么 Fragment1 & 3 & 5 被破坏。

用 Fragment2 & 4对的happending进行 ?

Fragment2 & 4不销毁它的视图作为 Fragment1 & 3 & 5的原因

请帮助我在调用 add() 和 replace() 方法时完全理解 fragment的生命周期。

更新我的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();
}
时间:原作者:0个回答

148 0

如果使用 FragmentTransaction 隐藏 fragment,那么它仍然处于生命周期的运行状态,但是它的UI已经经离开了窗口。你可以在技术上与 fragment 交互,以后再重新连接它的UI,你需要。替换 fragment,实际上你将它从容器中取出,它将在生命周期的所有事件中 go,如果你想再次使用它,你需要将它重新插入到容器中,让它重新运行。

原作者:
...