Koin sharedViewModel с помощью SavedStateHandle - PullRequest
2 голосов
/ 19 апреля 2020

У меня есть одно приложение активности и количество фрагментов. Некоторые из этих фрагментов используют мою модель представления, как правило, так:

private val myViewModel: MyViewModel by sharedViewModel()

Что если я хочу, чтобы модель и shared сохраняла свое состояние с помощью SavedStateHandle? Я не могу понять, поддерживается ли это, и если да, то как это нужно использовать (объявление viewmodel как stateViewModel в хостинге не работает).

1 Ответ

1 голос
/ 20 апреля 2020

Хорошо, после часа копания образцов Коина и выяснения нескольких ошибок:

  1. Предположим, что ваша модель вида выглядит примерно так:
class SavedStateViewModel(val handle: SavedStateHandle, val service: SimpleService) 
... и ваш DI выглядит так:
viewModel { (handle: SavedStateHandle) -> SavedStateViewModel(handle, get()) }
Ваша модель представления общего состояния может использоваться в ваших фрагментах следующим образом:
val sharedSaved: SavedStateViewModel by sharedViewModel()
(важно!) Вам нужна эта декларация в вашей деятельности:
lateinit var savedVm: SavedStateViewModel
(важно) Вам нужно вызывать это сразу после super.onCreate(savedInstanceState) в вашей деятельности:
savedVm  = getStateViewModel() 

Важно не использовать ленивую версию для вышеупомянутого (stateViewModel).

...