【问题标题】:How to remove only particular fragment from back stack?如何从后堆栈中仅删除特定片段?
【发布时间】:2018-01-04 08:01:42
【问题描述】:

我正在使用片段架构,我在片段中设计了登录页面,我想在用户登录成功后从后台堆栈中删除唯一的登录片段并打开另一个片段,请帮助我。

【问题讨论】:

  • 你试过了吗?
  • @Adrian,如果要删除的片段不在堆栈顶部会发生什么?实际上我想从其他片段的后堆栈中删除
  • @Sihvam,我尝试使用以下代码 if (((HomeActivity)getActivity()).isFragmentInBackStack(Constants.LOGIN)){ getActivity().getSupportFragmentManager().popBackStackImmediate(Constants.LOGIN,FragmentManager .POP_BACK_STACK_INCLUSIVE); }
  • 实际上我想在成功登录后从后台删除登录片段并再次显示仪表板片段,如果我们按下回则登录片段不应该出现。

标签: android fragment back-stack fragment-backstack


【解决方案1】:

试试这个,

你可以为每个片段添加一个标签,同时将它们添加到后台堆栈,然后从后台堆栈中弹出片段,直到没有到达带有你想要的标签的片段。

FragmentManager fm = getFragmentManager();

    for (int i = fm.getBackStackEntryCount() - 1; i > 0; i--) {
        if (!fm.getBackStackEntryAt(i).getName().equalsIgnoreCase(tagname)) {
            fm.popBackStack();
        }
        else
        {
         break;
        }
    }

【讨论】:

    【解决方案2】:

    替换()

    使用replace(),它将在添加您要显示的新片段之前从后台堆栈中替换登录片段

    示例

     Fragment fr1= new GoFragment();
     FragmentTransaction ft = getFragmentManager().beginTransaction();
     ft.replace(R.id.FragmentContainer,newFragment);
      ft.addToBackStack(null);
      ft.commit();
    

    【讨论】:

      【解决方案3】:

      当用户成功登录时,不要添加登录片段 BackStack,那么你需要在该行下方评论。

      ft.addToBackStack(null);
      

      当用户从一个片段导航到另一个片段时,此行会将您的片段添加到 BackStack。

      请参考以下链接

      https://developer.android.com/guide/components/fragments.html

      执行片段事务主题

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-20
      • 2018-07-27
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 2018-10-29
      • 2021-05-27
      相关资源
      最近更新 更多