【问题标题】:can the order of the fragments in the backstack be changed programmatically可以以编程方式更改后台堆栈中片段的顺序吗
【发布时间】:2016-05-11 14:39:47
【问题描述】:

在后栈中有 A->B->c,A 在顶部。 当时它希望 C 位于顶部,并保持 A、B 在堆栈中的顺序。在要求中,堆栈中不能有两个 C 实例。问题是如果弹出 C 则所有 A、B 都被删除。

它想要的是现在拥有 C->A->B。

是否可以通过 FragmentManager 的 api 实现这一点?

【问题讨论】:

  • 它被称为堆栈是有原因的,我认为没有 API,但根据您的用例,总有一种方法可以让它工作!
  • 我认为这个帖子已经回答了stackoverflow.com/questions/21665346/…
  • 也许创建一个具有所需顺序的新堆栈,或者使用反射来修改实际堆栈?

标签: android fragment-backstack


【解决方案1】:

FragmentManager不支持更改后堆栈的顺序或删除不在堆栈顶部的项目。

您可能需要考虑管理您自己的 Fragment backstack 版本。

【讨论】:

  • 是的,希望有来自 Android 的内置支持。
【解决方案2】:

将以下代码放入您的活动中

FragmentManager fragmentManager  


//add fragment A 
fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager .beginTransaction();
ft.add(resId, fragmentA);
ft.addToBackstack("tag");
ft.commit();

//add fragmentB
fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager .beginTransaction();
ft.replace(resId, fragmentB);
ft.addToBackstack("tag1");
ft.commit();

//add fragmentC
fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager .beginTransaction();
ft.replace(resId, fragmentC);
ft.addToBackstack("tag2");
ft.commit();

 //then try to take back click of B and C fragment here through interface

//backclick of C
public void backClick()
{
fragmentManager.popBackStack("tag1",0);
}

//back click of B
public void backClick1()
{
fragmentManager.popBackStack("tag",0);
}

【讨论】:

  • pop BackStack 会破坏片段。感谢分享!
【解决方案3】:

保持片段隐藏,如果你想显示它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2015-05-12
    • 1970-01-01
    • 2019-10-16
    • 2010-09-13
    • 1970-01-01
    • 2012-10-29
    相关资源
    最近更新 更多