在 Activity 中使用新的 BackHandler API
Android 11 中的新导航体系重新设计了返回堆栈。在此之前,应用程序使用 onBackPressed() 回调和任务(task)堆栈来管理返回。现在,应用程序通常使用导航组件和目的地(destination)图形来处理此堆栈,该图形允许应用程序开发人员更好地描述应用程序的目的地之间的关系。
为了更好地支持此新的导航体系,Android 11 引入了新的 BackHandler API。该 API 允许应用程序开发人员在 Activity 中自定义返回行为,而无需依赖基于任务的逻辑。使用 BackHandler API,您可以:
在示例代码中,我们使用 BackHandler API 将返回行为定制为以下目的地(destination):
// 定义返回行为
val backHandler = { destination: Destination ->
when (destination.id) {
R.id.home_dest -> { // 返回主页则退出应用
finish()
true
}
R.id.login_dest -> { // 返回登录页面则结束登录并退出应用
logout()
finish()
true
}
R.id.authorization_dest -> { // 返回授权页面则关闭该视图
closeAuthorizationView()
true
}
else -> false
}
}
// 在 Activity 中调用 BackHandler API 处理返回行为
override fun onBackPressed() {
val handled = NavHostFragment.findNavController(this).run {
val currentDestination = currentDestination ?: return
backHandler.invoke(currentDestination)
}
if (!handled) {
super.onBackPressed()
}
}
通过使用 BackHandler API,应用程序开发人员可以更好地控制应用程序中的返回行为,并在需要时目标特定的目的地。