能否以编程方式更改后堆栈中片段的顺序

can the order of the fragments in the backstack be changed programmatically

A->B->c 在后栈中,A 在顶部。 当时它想让C在最上面,让A、B在栈中保持顺序。在要求中,堆栈中不能有两个 C 实例。问题是如果弹出 C 那么所有 A、B 都被删除。

它要的是现在C->A->B

是否可以使用 FragmentManager 的 api 实现此目的?

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

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

您可能需要考虑管理您自己版本的 Fragment 后台堆栈。

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

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);
}