Android 如何杀死由NavHostFragment创建的所有碎片?
我有2个Android 如何杀死由NavHostFragment创建的所有碎片?,android,kotlin,android-architecture-navigation,back-stack,Android,Kotlin,Android Architecture Navigation,Back Stack,我有2个导航文件,在我的活动中有2个片段s。其中一个导航始终显示在其中一个片段中,但我仅在需要时才显示另一个 它们的绘制方式是,始终显示的片段位于relativeLayout内,而另一个片段位于同一relativeLayout内,其可见性设置为gone。当我需要第二次导航时,我将可见性设置为visible,当我不需要它时,我将其再次设置为gone。视觉效果很好,但我想完成的是,当我不需要第二次导航时,我想完全杀死它,并在下次需要时重新绘制它 到目前为止,我所做的是获得用于启动导航的NavHost
导航
文件,在我的活动
中有2个片段
s。其中一个导航始终显示在其中一个片段中,但我仅在需要时才显示另一个
它们的绘制方式是,始终显示的片段位于relativeLayout内,而另一个片段位于同一relativeLayout内,其可见性设置为gone
。当我需要第二次导航时,我将可见性设置为visible
,当我不需要它时,我将其再次设置为gone
。视觉效果很好,但我想完成的是,当我不需要第二次导航时,我想完全杀死它,并在下次需要时重新绘制它
到目前为止,我所做的是获得用于启动导航的NavHostFragment
,当我不再需要它时,在它的navController
上调用popBackStack()
,但它不起作用:
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()
只会将该堆栈向后弹出一次:
尝试弹出控制器的后堆栈。类似于当相关导航主机具有焦点时用户按下系统后退按钮
而内容如下:
尝试将控制器的后堆栈弹出回特定目标
destinationId
int:要保留的最上面的目的地
inclusive
boolean:是否也应弹出给定的目标
所以这应该是:
navController.popBackStack(R.id.startDestination, true)
我想知道为什么要使用两个NavController
,因为可以在运行时使用以下设置图形:
将导航图设置为指定的图。
将替换任何当前导航图数据(包括后堆栈)
问题是我没有一个startDestination
。我只想完全杀死并删除由NavHostFragment
创建的、在navigation
文件中定义的所有片段,因为我不再需要它们了。我需要打开背景中的一个片段,此时,将所有片段集成到一个navigation
文件中是不可行的。