能否以编程方式更改后堆栈中片段的顺序
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);
}
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);
}