【问题标题】:How to make fragment finish itself如何使片段自行完成
【发布时间】:2017-04-24 13:55:28
【问题描述】:

假设我有一个HomeActivity,它正在生成所有FragmentTransaction。所以,在每个fragment需要的时候打开另一个fragment。

首先,使用带有 bundle 的 newIntent() 片段返回 HomeActivity。然后 Home Activity 根据 bundle 中的数据打开前一个 Fragment 请求的所需 Fragment。在点击返回按钮时以相同的方式打开这么多片段后,它会将我带回到所有以前的片段,包括我按下返回的当前片段(如果我打开它不止一次)。
那么,如何完成()我从所有以前的片段历史中回击的当前片段,以便我无法通过转到以前的片段再次看到它

【问题讨论】:

  • 如果您需要完成所有相同的活动,请使用 finishAffinity() 函数。它将在单击完成所有父活动。

标签: android android-fragments


【解决方案1】:

感谢大家为我提供知识渊博的答案,但我找到了另一个解决方案,即我在片段中定义了一个公共静态布尔变量,我希望它不应该在后堆栈中出现两次或多次。因此,每当该片段被销毁时,布尔变量的值就会变为真(然后在 onStart() 中,它会检查来自返回堆栈的值并采取进一步的措施)这会防止该片段在击退时再次出现。再次感谢大家的参与。

【讨论】:

    【解决方案2】:

    您正在堆栈中添加片段,如果您通过fragmentTransaction.addToBackStack("[Fragment Name as Flag]"); 在后台堆栈中添加片段,那么您的交易将被记住,您将导航回堆栈顶部的片段。

    因此,当您不想在 backStack 中添加片段时,请不要在片段事务期间使用fragmentTransaction.addToBackStack("[Fragment Name as Flag]");

    【讨论】:

      【解决方案3】:

      只需从您的片段交易中删除此代码

      addToBackStack("null")
      

      希望对你有帮助。

      【讨论】:

        【解决方案4】:
         FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
         fragmentTransaction.replace(containerId, fragment, fragment.getClass().getSimpleName());
         fragmentTransaction.addToBackStack("[Fragment Name as Flag]");
         fragmentTransaction.commit();
        

        只需用你的fragment Tag添加backstack,这样Fragment事务会将打开的相同fragment计数为1,当popBackStack时,它将清除所有具有相同Flag的堆栈

        【讨论】:

          猜你喜欢
          • 2012-10-19
          • 1970-01-01
          • 2019-07-07
          • 1970-01-01
          • 2018-05-12
          • 1970-01-01
          • 1970-01-01
          • 2021-02-12
          • 2011-06-17
          相关资源
          最近更新 更多