使用Navigation时,给Fragment添加类似onBac
2019-04-09 本文已影响0人
3ebc24b45a3b
通过查看源码发现,在导航视图文件中为fragment添加的name属性可以通过FragmentNavigator.Destination的getClassName(),而NavController也提供了得到当前Destination的方法getCurrentDestination(),于是就可以在activity中判断出当前显示的是哪个Fragment。
Talk is cheap. Show me the code.
override fun onBackPressed() {
val navController = findNavController(this, cn.hisw.sjtw.R.id.nav_host_fragment)
val currentDestination = navController.currentDestination // 得到当前目的地
if (currentDestination is FragmentNavigator.Destination){ //对Destination进行强制转换
when (currentDestination.className){
//如果当前页是SplashFragment或StartFragment或MainFragment则直接退出Activity
SplashFragment::class.java.name ,
StartFragment::class.java.name ,
MainFragment::class.java.name ->
finish()
else -> super.onBackPressed()
}
}else {
super.onBackPressed()
}
}