android:返回特定的片段(然后弹出所有内容)

时间:2015-12-14 21:08:14

标签: android android-fragments

让我们说在我的应用程序中有一些可能的导航流程(都是Fragments

A -> B -> C -> D -> E
A -> F -> B -> C

我希望能够返回到片段B,无论事务堆栈深度如何(即,如果我当前正在显示E或{{我不想跟踪1}})。我注意到可以标记片段,但以下代码似乎不起作用:

C创建片段fragment A又称B

SocialViewFragment

然后在FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // Method 1 transaction.add(R.id.fragment_container, frag, SocialViewFragment.FRAG_TAG).commit(); // Method 2 //transaction.replace(R.id.fragment_container, frag); //transaction.addToBackStack(SocialViewFragment.FRAG_TAG).commit(); 中,Fragment E返回false(并且什么都不做),因为它无法找到标记?!

popBackStack

2 个答案:

答案 0 :(得分:1)

看起来你混淆了两种不同类型的标签。

您可以传递给add()的可选字符串参数是片段的标记,允许您稍后通过调用findFragmentByTag()找到相同的片段。

传递给addToBackStack()popBackStack()的可选字符串参数称为"名称"并用于识别FragmentManager的后栈中的特定事务。它不是Fragment标记,因为后面的堆栈条目表示可能有多个Fragment添加或删除的特定事务。

要正确使用后端堆栈名称,请确保使用非空字符串调用addToBackStack(),然后稍后可以使用相同的字符串调用popBackStack()以弹出该特定事务。

另请注意,在add()来电时,您根本不会致电addToBackStack()。因此,mgr.getBackStackEntryCount()将为0,并且您的popBackStack()调用将永远不会发生(除非您已将其他片段添加到后台堆栈中。)

答案 1 :(得分:0)

为了popBackStack,你应该首先添加ToBackStack。

使用代码中注释的方法:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

transaction.replace(R.id.fragment_container, frag);
transaction.addToBackStack(SocialViewFragment.FRAG_TAG).commit();