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