当前位置: 首页 > 知识库问答 >
问题:

从第三个片段到第一个片段:Android

赫连昕
2023-03-14

我有一个事件序列,通过它,我已经将三个片段一个接一个地添加到背景堆栈中。这些片段,每一个都覆盖了活动的全屏。

我已经存储了从Frag1的提交返回。

现在在Frag3中,基于特定的单击,我想直接回到Frag1并丢弃/弹出之间的所有Fragments。

因此,单击此按钮时,我会向活动发送一条消息,该消息执行以下操作:

getSupportFragmentManager().popBackStack(mFrag1Id, FragmentManager.POP_BACK_STACK_INCLUSIVE);

但我只是得到一个空白屏幕,所以我假设没有加载碎片。

我甚至试过:在commit-fragmentTransaction中。addToBackStack(“碎片1”) 然后

getSupportFragmentManager().popBackStack("Fragment1", FragmentManager.POP_BACK_STACK_INCLUSIVE);

但它不起作用。有人能帮我吗?

谢谢


共有3个答案

景才英
2023-03-14

当您打开片段A并导航到片段B,然后导航到片段C,然后您想关闭片段C和B并降落到片段A上

现在在一些场景中,你想关闭片段C和片段B,然后你想降落在片段A上。。。然后使用FragmentManager的这个逻辑来完成这样的任务。

  1. 首先获取后堆栈中的片段条目数(当我们向addToBackStack(“Frag1”)添加任何片段时),此时片段后堆栈条目将增加

那就用这个吧

FragmentManager fmManager = activity.getSupportFragmentManager();
Log.e("Total Back stack Entry: ", fmManager.getBackStackEntryCount() + "");

现在假设,您想要关闭当前片段(片段C)和最后一个片段(片段B),所以简单的逻辑是GetBackbackEntryCount-2,此时您的后堆栈条目计数将为3(片段A、片段B和片段C)

这里-2是因为我们要走2片段退后一步(片段C和片段B)

简单的两行代码是:

if (fmManager.getBackStackEntryCount() > 0) {
fmManager.popBackStack(fmManager.getBackStackEntryAt(fmManager.getBackStackEntryCount()-2).getId(), FragmentMaanger.POP_BACK_STACK_INCLUSIVE);
}

您还可以通过添加两次“popBackStack()”来完成此操作,并且也可以工作,但这不是一种空闲的方式

FragmentManager fmManager = activity.getSupportFragmentManager();
fmManager.popBackStack();
fmManager.popBackStack();
寇涵容
2023-03-14

从第三个片段,您应该调用popBackStack();两次(一次删除第三个片段,第二次删除第二个片段)

android.support.v4.app.FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.remove(ThirdFragment.this);
transaction.commit();
fm.popBackStack();
fm.popBackStack();
俞学
2023-03-14

好吧,我找到了问题所在。

FragmentManager。POP_BACK_STACK_INCLUSIVE弹出所有片段,包括id作为参数传递的片段。

例如:

getSupportFragmentManager().popBackStack(mFrag1Id, FragmentManager.POP_BACK_STACK_INCLUSIVE);

在这里,它将弹出堆栈上的所有内容,包括id为mFrag1Id的片段。

 类似资料:
  • 在我的应用程序中,我有两个片段,分别是fragmentA和FragmentB。当我点击fragmetA中的按钮时,fragmentB中会打开一个列表。现在,当我从fragmentB中的列表中选择一个项目时,我希望将结果传递给fragmentA。我只对所有片段使用一个TabActivity。当列表项在fragmentB中被选中时,我将从堆栈中弹出fragmentB,以便直接返回fragmentA。

  • 我的中有10个选项卡。打开活动后,第一个片段就会显示出来,但下一个片段中的方法(AsyncTask)会被调用。如果我转到下一个选项卡,比如第3个选项卡,那么将调用第4个中的方法,依此类推。 我不理解这种行为。请救命!

  • 这是我完整的logcat: 在Android.support.v4.app.backStackRecord.doaddop(backStackRecord.java:414)在Android.support.v4.app.backStackRecord.replace(backStackRecord.java:449)在Android.support.v4.app.backStackRecord.

  • 我在弄清楚碎片是如何工作的。我有3个类,MainActivity,Fragment1和fragment2。 MainActivity扩展了 Fragment2还扩展了SherlockFragment,但什么也不做,将它膨胀为空。xml

  • 我需要一些暑期项目的帮助 这是我的事件片段 这是我的MyList片段 我正在使用RecyclerViewCardView显示事件。其想法是,用户可以单击每张卡片右侧的大加号,卡片将显示在MyList片段中。我想问一下,是否可以将一张卡直接从一个片段转移到另一个片段?而且,这两个片段都包含在同一个活动中,这使得它有点棘手(我还没有找到任何可用的解决方案)。 如果不可能,另一种方法是将CardView

  • 先生/女士,我想使用android JAVA将一个片段回调到另一个片段。我试图找到问题,但没有找到解决方案。若我使用接口,它会向活动发送回调响应,这是我不想要的。非常感谢。