Как использовать Koin sharedViewModel () и NavigationComponent navArgs () вместе - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь ввести sharedViewModel, используя arguments в качестве key.

private val args: TrackDetailFragmentArgs by navArgs()
private val trackVM: TrackDetailViewModel by sharedViewModel(key = args.trackId.toString())

Это ошибка, которую я получаю

 Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.marcheoutdoor.fragments.TrackDetailFragment: calling Fragment constructor caused an exception
    at androidx.fragment.app.Fragment.instantiate(Fragment.java:474)
    at androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:165)
    at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:181)
    at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:50)
    at androidx.navigation.NavController.navigate(NavController.java:797)
    at androidx.navigation.NavController.navigate(NavController.java:782)
    at androidx.navigation.NavController.navigate(NavController.java:719)
    at androidx.navigation.NavController.navigate(NavController.java:705)
    at androidx.navigation.NavController.navigate(NavController.java:837)

Япредполагаю, что arguments равны нулю, когда sharedViewModel вводится, но я не уверен.

Как я могу использовать trackId как key (или, возможно, как parameter?) при получении из arguments?

EDIT1 : я пытался использовать прямой вызов arguments, и он работает

private val trackVM: TrackDetailViewModel by sharedViewModel(key = arguments?.getLong("trackId").toString())

Так что я предполагаючто-то не так с вызовом navArgs().

EDIT2 : как подсказывает Commonware , EDIT1 на самом деле не работает, он просто передает null key к методу.Я теряю надежду, что есть способ использовать этот подход.

...