Могу ли я управлять владельцем жизненного цикла, вводя viewModel с помощью Koin? - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть одно приложение Activity.

Я хочу связать viewModel с жизненным циклом родительского фрагмента (FlowFragmentLogin) и поделиться им с дочерними фрагментами (CellFragment, InfoFragment, etc),Так что, когда я перехожу из FlowFragmentLogin в FlowFragmentMain, вызывается viewModel onCleared().

Но я нашел единственный способ поделиться viewModel между Activity и ее фрагментами: https://insert-koin.io/docs/1.0/documentation/koin-android/index.html

И никакого контроля над владельцами жизненного цикла.Что для меня неприемлемо, хотя бы потому, что эта viewModel будет жить до смерти приложения.

1 Ответ

0 голосов
/ 15 июля 2019

С момента навигации 2.1.0-alpha02:

Теперь вы можете создавать ViewModel, которые ограничены областью навигационного графа через делегат свойства navGraphViewModels () для пользователей Kotlin или с помощью API getViewModelStore ()добавлен в NavController.

Вы можете найти журнал изменений здесь и документ .

К сожалению, Коин не может поддерживать эту функцию, поскольку viewModel() илиsharedViewModel() был связан с деятельностью.Но поддержка nav уже запланирована в 2.1.x, и вы можете отслеживать здесь .


На данный момент вот мое решение:

  1. Использование navGraphViewModels() вместо viewModel() в коинах.
class DetailFr : Fragment() {
    private val vm: DetailViewModel by navGraphViewModels(R.id.main_nav_graph)
}
Сделайте так, чтобы ViwModel реализовал KoinComponent, чтобы мы могли использовать by inject() вместо инжектирования конструктором.
class DetailViewModel : ViewModel(), KoinComponent {

    private val repo: DetailRepository by inject()
    // othetr objects you need
}

Надеюсь, это поможет

...