Как kotlin использует это делегатом для создания экземпляра модели представления - PullRequest
1 голос
/ 26 сентября 2019

Я читал пример архитектуры Google android и наткнулся на это. Может кто-нибудь объяснить мне, как работает этот делегат?

private val viewModel by viewModels<TasksViewModel> { getViewModelFactory() }

, где getViewModelFactory - это метод расширения, который возвращает ViewModelFactory, а TasksViewModel - это экземпляр ViewModel ()

Способ, которым я читаю, похож на:

private val viewModel: TasksViewModel by Fragment.ViewModel(ViewModelFactory)

Может кто-нибудь уточнить, правильно ли мое понимание.

1 Ответ

3 голосов
/ 26 сентября 2019

by viewModels(...) является частью библиотеки fragment-ktx, это удобный способ создания lazy делегата, получающего ViewModels.

// creates lazy delegate for obtaining zero-argument MyViewModel
private val viewModel : MyViewModel by viewModels()
// it's functionally equal to:
private val viewModel by lazy {
    ViewModelProviders.of(this).get(MyViewModel::class.java)
}

// with factory:
private val viewModel : MyViewModel by viewModels{ getViewModelFactory() }
// is equal to:
private val viewModel by lazy {
    ViewModelProviders.of(this, getViewModelFactory()).get(MyViewModel::class.java)
}    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...