Я использую Koin для вставки viewModel во фрагмент. Мое приложение - одно действие. Мне нужна эта sharedViewModel только в servisFragment и partFragment. Я хотел бы удалить этот viewModel из Activity после навигации, отмеченной красным.
Как я могу это сделать?
Код для внедрения viewModel
private val servisViewModel by sharedViewModel<ServisViewModel>()
Коин sharedViewModel
inline fun <reified T : ViewModel> Fragment.sharedViewModel(
name: String? = null,
noinline from: ViewModelStoreOwnerDefinition = { activity as
ViewModelStoreOwner },
noinline parameters: ParametersDefinition? = null
) = lazy { getSharedViewModel<T>(name, from, parameters) }
Спасибо за любую помощь.
by sharedViewModel(from = { parentFragment as ViewModelStoreOwner})
для привязки жизненного цикла ViewModel к жизненному циклу родительского фрагмента. Но в компоненте навигации я не знаю, как получить экземпляр родительского фрагмента. - person HvSimon   schedule 11.07.2019by viewModel()
может автоматически очищаться при уничтожении фрагмента. - person HvSimon   schedule 11.07.2019getParentFragment()
. Он всегда возвращаетNavHostFragment
, а не вашservisFragment
. - person HvSimon   schedule 11.07.2019I need that sharedViewModel only in servisFragment and partFragment
. На вашем графикеpartFragment
- дочерний фрагмент, аservisFragment
- родительский фрагмент. Итак, если мы сможем привязатьsharedViewModel
к родительскому фрагменту,sharedViewModel
будет очищен, когда вы перейдете по красному пути. - person HvSimon   schedule 11.07.2019findNavController().navigate(ServisFragmentDirections.Action_servisFragment_to_menuFragment())
, чтобы вернуться кmenuFragment
, а затем снова перейти кservisFragment
, все еще в нем (данные не очищены). - person solaza   schedule 11.07.2019partFragment
. Если вы привяжете не того родителя, ViewModel будет нечетким - person HvSimon   schedule 11.07.2019getParentFragment()
возвращаетNavHostFragment
. Есть ли способ получитьservisFragment
? - person solaza   schedule 11.07.2019