我有2个navigation
文件,在我的Activity
中有2个fragment
。其中一个导航始终显示在其中一个片段中,但是只有在需要时才显示另一个。
它们的绘制方式是,始终显示的片段位于relativeLayout内,另一个片段位于[RemoveLayout]中,其visibility
设置为gone
。当我需要第二个导航时,我将可见性设置为visible
,当我不需要它时,我再次将其设置为gone
。从视觉上看,这很好,但是我想实现的是当我不需要想要第二个导航,我想完全杀死它,并在下次需要它时重新绘制它。
[到目前为止,我已经掌握了用于启动导航的NavHostFragment
,当我不再需要它时,请在popBackStack()
上调用navController
,但它不起作用:
val navHost: NavHostFragment? = null
fun createSecondNav() {
navHostLogin = NavHostFragment.create(R.navigation.navigation_second)
theFragment.visibility = View.VISIBLE
supportFragmentManager.beginTransaction()
.replace(R.id.theFragment, navHostLogin!!)
.commit()
}
fun killSecondNav() {
theFragment.visibility = View.GONE
navHostLogin?.navController?.popBackStack() // returns false
navHostLogin = null
}
那么我如何完全杀死第二个navHost
创建的碎片?
[NavController
维护它自己的后置堆栈,独立于FragmentManager
后置堆栈。
并且popBackStack()
不带参数只会在堆栈中弹出一次:
尝试弹出控制器的后堆栈。类似于当关联的导航主机具有焦点时用户按下系统的“后退”按钮。
popBackStack(int destinationId, boolean inclusive)
读为:
尝试将控制器的后退栈弹出到特定的目的地。
- [
popBackStack(int destinationId, boolean inclusive)
int:要保留的最高目标位置destinationId
布尔值:是否还应该弹出给定的目的地。
所以应该是:
inclusive