Navigation Component:目标不在返回栈时如何删除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
相关产品推荐
相关产品推荐

