При использовании navGraphViewModels с графом навигации на основе Kotlin DSL приложение аварийно завершает работу.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 При использовании navGraphViewModels с графом навигации на основе Kotlin DSL приложение аварийно завершает работу.

Сообщение Anonymous »

Я инициализирую график в Activity с помощью Kotlin DSL и использую navGraphViewModels() для получения экземпляра vm в onCreate() фрагмента. Однако после смерти процесса приложение вылетает

Код: Выделить всё

Caused by: java.lang.IllegalArgumentException: No destination with route main_navigation is on the NavController's back stack. The current destination is null
MainActivity.kt

Код: Выделить всё

    override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navController = (supportFragmentManager
.findFragmentById(R.id.nav_host_fragment) as NavHostFragment).navController

val graph = navController.createGraph(
startDestination = "MyFragment1", route = "main_navigation"
) {
fragment("MyFragment1") {
deepLink("fi://fragment1")
argument("testing") {
type = NavType.StringType
defaultValue = "hello"
}
}

navigation("MyFragment2", "included_graph") {
fragment("MyFragment2") {
deepLink("fi://fragment2")
argument("testing") {
type = NavType.StringType
nullable = true
}
}
}
}

navController.graph = graph
}
MyFragment1.kt

Код: Выделить всё

    private val vm: Vm by navGraphViewModels("main_navigation")

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
vm.someFunction()
}

Stacktrace

Код: Выделить всё

                 Caused by: java.lang.IllegalArgumentException: No destination with route main_navigation is on the NavController's back stack.  The current destination is null
at androidx.navigation.NavController.getBackStackEntry(NavController.kt:2472)
at com.example.testingnavigation.MyFragment1$special$$inlined$navGraphViewModels$default$1.invoke(NavGraphViewModelLazy.kt:209)
at com.example.testingnavigation.MyFragment1$special$$inlined$navGraphViewModels$default$1.invoke(NavGraphViewModelLazy.kt:208)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at androidx.navigation.NavGraphViewModelLazyKt.navGraphViewModels$lambda-3(NavGraphViewModelLazy.kt:208)
at androidx.navigation.NavGraphViewModelLazyKt.access$navGraphViewModels$lambda-3(NavGraphViewModelLazy.kt:1)
at com.example.testingnavigation.MyFragment1$special$$inlined$navGraphViewModels$default$4.invoke(NavGraphViewModelLazy.kt:217)
at com.example.testingnavigation.MyFragment1$special$$inlined$navGraphViewModels$default$4.invoke(NavGraphViewModelLazy.kt:214)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:47)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:35)
at com.example.testingnavigation.MyFragment1.getVm(MyFragment1.kt:26)
at com.example.testingnavigation.MyFragment1.onCreate(MyFragment1.kt:30)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:3094)
at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:504)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:268)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:122)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1455)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3034)
at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:2941)
at androidx.fragment.app.Fragment.restoreChildFragmentState(Fragment.java:1989)
at androidx.fragment.app.Fragment.onCreate(Fragment.java:1967)
at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.kt:163)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:3094)
at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:504)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:268)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:114)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1455)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3034)
at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:2941)
14:03:56.302  E     at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:252)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:219)
at com.example.testingnavigation.MainActivity.onCreate(MainActivity.kt:17)
at android.app.Activity.performCreate(Activity.java:8119)
at android.app.Activity.performCreate(Activity.java:8103)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1359)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3713)
... 11 more
Шаги по воспроизведению сбоя
  • Откройте приложение и переведите его в фоновый режим
  • затем используйте эту команду adbshell am kill
  • перезапустите приложение из значка приложения.
Не происходит сбоя при прямой настройке навигационного графика в файле макета Activity_main.xml.
Как правильно использовать навигацию через Kotlin DSL?< /п>

Подробнее здесь: https://stackoverflow.com/questions/782 ... sl-the-app
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»