Android Jetpack Navigation配置变更后导航状态失效问题
问题场景
在原生Android Kotlin项目中采用Single Activity架构,由CoreActivity托管单个导航宿主(NavHost),通过Jetpack Navigation及核心导航图维护Fragment导航层级。原本Fragment间的跳转完全正常,但遇到横竖屏切换这类配置变更操作后,导航功能直接失效,LogCat输出以下错误日志:
FragmentNavigator: Ignoring navigate() call: FragmentManager has already saved its state
排查误区
曾看到有建议提到要在onActivityResult方法中恢复导航状态,但我的场景仅涉及单个NavHost内部的Fragment跳转,完全没有跨Activity的导航操作,既疑惑为什么需要重写该方法,也找不到匹配场景的示例代码。
最终原因与解决
经过排查发现问题出在自己的代码里:导航操作时引用了配置变更后已经被销毁的旧Activity上下文,导致navigate调用被导航库的FragmentManager拦截,从而触发了上述日志提示。
修正方式是确保导航时使用的是当前存活的Activity/Fragment上下文,比如在Fragment中优先使用viewLifecycleOwner关联的上下文,或者在Activity中使用当前实例而非持有旧的引用。
内容的提问来源于stack exchange,提问作者Dan Gerchcovich
相关产品推荐
相关产品推荐

