【问题标题】:How to perform custom navigation?如何执行自定义导航?
【发布时间】:2019-05-23 07:43:18
【问题描述】:
我尝试使用称为导航的新架构组件。与使用 FragmentManager 相比,这非常令人兴奋并且代码更少。现在,我最终遇到了一个有 5 个导航片段的情况,如下所示:
A -> B -> C -> D -> E
有时我必须将用户从片段 A 直接移动到 E,如果按下后退按钮,我想要这样的东西:
E -> D -> C -> B -> A
但我现在得到的是:
E -> A
有什么可行的方法可以实现吗?
【问题讨论】:
标签:
android
android-jetpack
android-navigation
android-architecture-navigation
【解决方案1】:
好的!如果你想从E -> A 去,那么你需要从fragmentManager 去pop 一些fragments。所以,你需要这样做:
var size = fragmentManager!!.backStackEntryCount
var fm: FragmentManager = fragmentManager as FragmentManager
for (i in 0..(size - 1)) {
fm.popBackStack()
}
在您的backPressed 活动中。
【解决方案2】:
如果您现在想返回时直接从 E->D 移动,请检查 Fragment 是否已经存在于 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();
}