【问题标题】:Two fragments are displayed when clicking back单击返回时显示两个片段
【发布时间】:2015-01-12 08:46:51
【问题描述】:

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

当 Activity 打开时,我使用以下代码将 fragment1 添加到主容器

    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 并单击返回时,我实际上应该看到 homefragment 而不是 fragment2。
2.我没有将fragment3添加到后台堆栈,因为fragment3中的一个按钮再次启动fragment2,它将启动fragment3。 (使用上面显示的相同代码)在这种情况下,如果我单击返回,我可以看到我不需要的 fragment3 的多个实例。请帮忙解决这个问题。

编辑2:

这些是我的观察。
在第 1 步中:容器有 homefragment.xml
在第 2 步中:将容器替换为 fragment1..xml
在第 3 步中:将容器替换为 fragment3.xml
当我单击后容器时,正在添加具有透明背景的 homefragment,这就是为什么片段 3.仍然可见。
当用户点击返回时,有什么办法可以删除backstack并单独添加homefragment?

【问题讨论】:

标签: android android-fragments


【解决方案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().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-fragments

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

希望这会有所帮助。

【讨论】:

  • 这不是一个答案,因为如果您在片段 3 可见时按下返回按钮,它将带您回到片段 2,但问题的作者希望它带回家片段
【解决方案2】:

你可以试试:

getFragmentManager().popBackStack();

【讨论】:

  • 他按下返回键!
猜你喜欢
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 2014-10-13
  • 1970-01-01
相关资源
最近更新 更多