You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Navigation Component:目标不在返回栈时如何删除saveState?

在Navigation 2.7.1中删除不在返回栈内目标的saveState

针对这个问题,这里有两种可行的解决方案,都不需要目标处于返回栈内:

  • 利用SavedStateHandle清空状态
    直接通过NavController的getSavedStateHandle(int destinationId)获取目标对应的SavedStateHandle实例,调用clear()就能清空所有保存的状态:

    val navController = findNavController(R.id.nav_host_fragment)
    val targetDestId = R.id.your_target_destination
    navController.getSavedStateHandle(targetDestId).clear()
    
  • 直接操作SavedStateRegistry移除状态条目
    Navigation保存目标状态时,会以androidx-nav:id:${destinationId}格式的key存入SavedStateRegistry。你可以通过NavController的savedStateRegistry属性操作注册表,移除对应条目:

    val navController = findNavController(R.id.nav_host_fragment)
    val targetDestId = R.id.your_target_destination
    val stateKey = "androidx-nav:id:$targetDestId"
    
    // 取消注册状态提供者
    navController.savedStateRegistry.unregisterSavedStateProvider(stateKey)
    // 彻底清除已恢复的状态数据
    navController.savedStateRegistry.consumeRestoredStateForKey(stateKey)
    

这两种方法都适配Navigation 2.7.1版本,能够满足你删除非栈内目标saveState的需求。

内容的提问来源于stack exchange,提问作者Javad Jafari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:42:37