Jetpack Compose 中实现与系统底部导航一致的返回导航功能
问题原因
你当前的返回实现逻辑本身和系统返回逻辑不一致:你通过获取前一个栈目的地路由再调用navigate(route)的操作,本质是往回退栈中新增一个前序目的地的实例,会触发正向导航转场动画,也会丢失前序页面的原有状态,和系统默认返回的「弹出当前栈顶目的地、恢复已有前序栈顶实例状态」的逻辑完全不同。
正确实现方案
直接使用Jetpack Navigation组件提供的popBackStack()方法即可,该方法的内部逻辑和安卓系统底部导航的返回逻辑完全对齐:
private fun navigateBack(navController: NavController) { navController.popBackStack() }
边界场景适配
如果需要对齐系统返回在回退栈为空时关闭当前页面的行为,可以补充如下判断:
private fun navigateBack(navController: NavController, currentActivity: Activity) { val isPopSuccess = navController.popBackStack() // 回退栈已空时关闭当前页面 if (!isPopSuccess) { currentActivity.finish() } }
注意:如果你使用的是2.4.0及以上版本的Navigation组件,
popBackStack()同样支持多回退栈场景下的逻辑对齐,无需额外适配。
内容的提问来源于stack exchange,提问作者mikolaj-jalocha
相关产品推荐
相关产品推荐

