如何执行自定义导航?

时间:2019-05-23 07:43:19

标签: android android-jetpack android-navigation android-architecture-navigation

我尝试使用称为导航的新架构组件。与使用FragmentManager相比,这非常令人兴奋并且编写的代码更少。现在,我遇到了5个带有导航片段的情况:

A -> B -> C -> D -> E

有时候我必须将用户从片段A直接移到E,如果按下后退按钮,我想要这样的东西:

E -> D -> C -> B -> A

但是我现在得到的是:

E -> A

有没有平易近人的方法来实现它?

2 个答案:

答案 0 :(得分:1)

好!如果您想从E -> A出发,则需要从popfragments一些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();
 }