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

单击后退时显示两个片段

葛晔
2023-03-14

我在xml文件中有一个主容器,我将根据按钮点击替换其中的片段。

当活动打开时,我正在使用以下代码将碎片1添加到主容器

    fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.container, homeMainFragment);
    fragmentTransaction.commit();

在HomeMainFragment中,单击一个按钮,执行以下操作。

   Fragment2 fragment2 = new Fragment2 ();
   fragmentTranasaction.replace(R.id.container, fragment2);
   fragmentTranasaction.addToBackStack(null);
   fragmentTranasaction.commit();

在Fragment2中,单击另一个按钮,使用以下代码移动到Fragment3。

   FragmentTransaction transaction = fragmentManager.beginTransaction();
   Fragment3 fragment3  = new Fragment3 ();
   transaction.replace(R.id.container, fragment3 );
   transaction.commit();

现在,当我单击后退时,我的UI应该显示HomeFragment,而不是显示home以及合并在一起的fragment3。

只是想明确我的要求
1。当我查看fragment3并单击back时,我应该会看到homefragment而不是fragment2
2。我没有将fragment3添加到Backback,因为fragment3中的一个按钮再次启动fragment2,这将启动fragment3。(使用上面显示的相同代码)在这种情况下,如果单击“上一步”,我可以看到多个我不需要的fragment3实例。请帮助解决此问题。

编辑2:


在第1步中:容器homefragment.xml
在第2步中:容器替换为片段1... xml
在第3步中:容器替换为fragment3.xml
当我单击返回容器时,它被添加为跨背景的Homefraank,这就是为什么片段3.is仍然可见。
当用户单击返回时,是否有任何方法可以单独删除后端堆栈并添加Homefraank?

共有2个答案

滑乐逸
2023-03-14

您可以尝试:

getFragmentManager().popBackStack();
陶瀚玥
2023-03-14

我想这就是你必须做的。

fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.container, homeMainFragment);
fragmentTransaction.commit();

在HomeMainFragment中,单击一个按钮,执行以下操作。

Fragment2 fragment2 = new Fragment2 ();
fragmentTranasaction.replace(R.id.container, fragment2);
fragmentTranasaction.addToBackStack().commit();

在Fragment2中,单击另一个按钮,使用以下代码移动到Fragment3。

FragmentTransaction transaction = fragmentManager.beginTransaction();
Fragment3 fragment3  = new Fragment3 ();
transaction.replace(R.id.container, fragment3 );
transaction..addToBackStack().commit();

有关更多信息,请参阅下面的链接。

http://developer.android.com/training/implementing-navigation/temporal.html#back-碎片

根据留档,当后栈上有FragmentTransaction对象并且用户按下后退按钮时,FragmentManager会将最近的事务从后栈中弹出并执行反向操作(例如,如果事务添加了它,则删除片段)。

希望这有帮助。

 类似资料:
  • 在写这个之前,我已经经历了很多stackoverflow问题。我对这个家伙的碎片背栈很困惑。 我在一个活动中的同一个容器上添加了三个片段 现在我想要的是,当用户按下片段3上的后退按钮时,它应该出现在第一个片段上,所以我已经覆盖了onBackPressed()方法。 但屏幕上什么也没发生,它让片段3继续运行。 更新 任何实现这一点的解决方案。

  • 按钮点击页面后刷新并重定向到另一个页面。在我的情况下,点击按钮后,我给页面刷新超时,但点击按钮后,它显示超时异常,没有时间等待。 例外: 失败:createEventTest组织。openqa。硒。TimeoutException:等待页面加载时超时。命令持续时间或超时:15.08秒构建信息:版本:“2.53.0”,修订版:“35ae25b1534ae328c771e0856c93e187490c

  • 问题内容: 我最近在许多Android应用程序和游戏中都注意到了这种模式:单击“后退”按钮以“退出”该应用程序时,会出现类似“请再次单击BACK退出”的消息。 我想知道,正如我越来越经常看到的那样,这是你可以以某种方式在活动中访问的内置功能吗?我看过许多类的源代码,但似乎找不到任何东西。 当然,我可以考虑几种很容易实现相同功能的方法(最简单的方法可能是在活动中保留一个布尔值,以指示用户是否已经单击

  • 我在一个跨度上有一个通过foundation 5的工具提示,如下所示: 这个很管用。然而,我想做的只是在用户单击span(而不是悬停)时显示工具提示。然后单击“关闭”按钮时关闭。当我添加时,我可以做到一半,但这增加了两个工具提示,当我悬停时仍然会感到失望。 任何想法都将不胜感激。Foundation5没有一些交互式内容的弹出,这似乎很奇怪。 谢谢!

  • 我需要帮助创建一个div,当你点击一个按钮时,里面有自定义超文本标记语言的div会被创建。 如果这是可能的(很可能是),我正在制作一个邮箱。 谢谢!!!

  • 链接到我正在尝试刮取的页面: https://www.nytimes.com/reviews/dining 因为这个页面有一个“show more”按钮,所以我需要Selenium自动反复单击“show more”按钮,然后以某种方式使用Beauty soup来获取页面上每个餐厅评论的链接。在下面的照片中,我想获取的链接位于https://...onigiri.html" 迄今为止的代码: 我如何