Я занимаюсь разработкой приложения с использованием архитектуры MVVM, модулей, компонентов Koin for DI, Android Navigation и ViewModel, и пытаюсь реализовать правильную навигацию между фрагментами (я пытаюсь следовать единому шаблону действий).
Мое приложение состоит из модуля: приложение, которое зависит от всех функциональных модулей: данные и: домен. Приложение используется для DI, и я тоже хотел использовать его для навигации. Так что у него есть MainActivity с NavController.
Мои функциональные модули зависят от общего модуля и моего домена.
У меня есть интерфейс Router: общий модуль, который предоставляет все необходимые маршруты для моих фрагментов в функциональных модулях. Я хотел реализовать этот интерфейс на: app. Так, чтобы мои ViewModels в функциях могли внедрить этот маршрутизатор и использовать его, когда они хотят перемещаться
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, мое приложение вылетает с
java.lang.IllegalArgumentException: navigation destination com.toto.myapp:id/action_fragmentA_to_fragmentB is unknown to this NavController
Вы знаете, что не так с моей навигационной абстракцией?
Спасибо