对于以下代码你有什么想法?在我的测试中,我发现替换的片段没有被销毁,在弹出后退栈时实例仍然存在。只是想确认这是否是使用片段事务的有效方法。
getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(frame, fragmentB).commit();
我使用 replace 的原因是它会使被替换的片段运行其退出动画。
对于以下代码你有什么想法?在我的测试中,我发现替换的片段没有被销毁,在弹出后退栈时实例仍然存在。只是想确认这是否是使用片段事务的有效方法。
getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(frame, fragmentB).commit();
我使用 replace 的原因是它会使被替换的片段运行其退出动画。
// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
所以,是的,你正在采取正确的方法替换片段。
transaction.replace
只是用第二个参数中传递的 Fragment 替换片段容器中当前存在的 Fragment。因此,在这个答案中,每次我都创建一个新的 ExampleFragment
,因此每次 Fragment 都是全新的。如果你有对 Fragment 的引用,你不一定需要重新创建 Fragment,只需使用引用调用 transaction.replace
即可。但在你的示例中,如果选择保留相同的 Fragment_1/2/3,则用户在向后导航时会出现奇怪的后退堆栈。 - Jason Hu