我尝试使用称为导航的新架构组件。与使用FragmentManager
相比,这非常令人兴奋并且编写的代码更少。现在,我遇到了5个带有导航片段的情况:
A -> B -> C -> D -> E
有时候我必须将用户从片段A直接移到E,如果按下后退按钮,我想要这样的东西:
E -> D -> C -> B -> A
但是我现在得到的是:
E -> A
有没有平易近人的方法来实现它?
答案 0 :(得分:1)
好!如果您想从E -> A
出发,则需要从pop
到fragments
一些fragmentManager
。因此,您需要这样做:
var size = fragmentManager!!.backStackEntryCount
var fm: FragmentManager = fragmentManager as FragmentManager
for (i in 0..(size - 1)) {
fm.popBackStack()
}
在您的backPressed
事件中。
答案 1 :(得分:0)
如果现在要返回时直接从E-> D移动,请检查片段是否已存在于后堆栈中;如果存在,请重新打开该片段。为此
您可以使用findFragmentByTag()或findFragmentById()函数来获取片段。如果提到的方法返回null,则该片段不存在。
Fragment fragmentA = fragmentManager.findFragmentByTag("frag1");
if (fragmentA == null) {
//not exist
}
else{
//fragment exist
}
在其他情况下,您先去A-> B-> C-> D,然后要弹出多个片段,然后Yo就可以在Java中这样做
for (int i=0;i<fragmentManager.backStackEntryCount;i++) { // or change the many fragments you want to pop.
fragmentManager.popBackStack();
}