我正在使用MVVM体系结构,模块,Koin for DI,Android导航和ViewModel组件开发应用程序,并且试图在片段之间实现适当的导航(我试图遵循单一活动模式)。
我的应用程序由模块:app组成,该模块对所有功能模块:data和:domain都具有依赖性。该应用程序用于DI,我也想将其用于导航。因此它具有带有NavController的MainActivity。 我的功能模块依赖于通用模块和我的域。
我在:common模块中具有路由器接口,该接口为功能模块中的片段提供了所有必需的路由。我想在:app上实现该接口。这样我的功能中的ViewModel可以注入此路由器并在需要导航时使用它
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navigationModule = NavigationModule(
RouterImpl(
findNavController(R.id.main_content)
)
).navigationModule
loadKoinModules(navigationModule)
}
RouterImpl.kt
class RouterImpl(private val navController: NavController) : Router {
override fun fragmentAtoFragmentB() {
navController.navigate(R.id.action_fragmentA_to_fragmentB)
}
override fun fragmentAtoFragmentC() {
navController.navigate(R.id.action_fragmentA_to_fragmentC)
}
}
RouterModule.kt
class NavigationModule(router: Router) {
val navigationModule = module(override = true) {
single {
router
}
}
}
它正在工作,但是当我导航到片段B时,我旋转以便重新创建活动,并使用新的NavController重新创建路由器,然后回到片段A并尝试导航到片段B,我的应用程序崩溃了,< / p>
java.lang.IllegalArgumentException: navigation destination com.toto.myapp:id/action_fragmentA_to_fragmentB is unknown to this NavController
您知道我的导航抽象出了什么问题吗?
谢谢