Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何执行自定义导航?_Android_Android Jetpack_Android Navigation_Android Architecture Navigation - Fatal编程技术网

Android 如何执行自定义导航?

Android 如何执行自定义导航?,android,android-jetpack,android-navigation,android-architecture-navigation,Android,Android Jetpack,Android Navigation,Android Architecture Navigation,我尝试使用名为导航的新体系结构组件。与使用FragmentManager相比,它非常激动人心,代码更少。现在,我在一个案例中得到了5个导航片段,如下所示: A->B->C->D->E 有时,我必须将用户从片段A直接移动到E,如果按下“后退”按钮,我希望如下所示: E->D->C->B->A 但我现在得到的是: E->A 有什么方法可以让它实现吗?好的!如果你想从E->A进入,那么你需要从fragmentManager中pop一些fragments。因此,您需要执行以下操作: var size =

我尝试使用名为导航的新体系结构组件。与使用
FragmentManager
相比,它非常激动人心,代码更少。现在,我在一个案例中得到了5个导航片段,如下所示:

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

有时,我必须将用户从片段A直接移动到E,如果按下“后退”按钮,我希望如下所示:

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

但我现在得到的是:

E->A


有什么方法可以让它实现吗?

好的!如果你想从
E->A
进入,那么你需要从
fragmentManager
pop
一些
fragments
。因此,您需要执行以下操作:

var size = fragmentManager!!.backStackEntryCount
var fm: FragmentManager = fragmentManager as FragmentManager
for (i in 0..(size - 1)) {
    fm.popBackStack()
}

在您的
backPressed
事件中。

如果您现在要返回时直接从E->D移动,请检查片段是否已存在于backstack中,如果存在,请移动到该片段,否则将再次打开。为此

可以使用findFragmentByTag()或findFragmentById()函数获取片段。如果提到的方法返回null,则该片段不存在

Fragment fragmentA = fragmentManager.findFragmentByTag("frag1");
if (fragmentA == null) {
    //not exist
}
else{
   //fragment exist
}
在您的另一个场景中,您进入A->B->C->D,然后想要弹出多个片段,那么您可以在java中这样做

 for (int i=0;i<fragmentManager.backStackEntryCount;i++) { // or change the many fragments you want to pop.
     fragmentManager.popBackStack();
 }
for(int i=0;i