Kotlin如何通过委托使用此实例化视图模型

ste*_*erd 1 android kotlin

我正在阅读google android体系结构示例,并遇到了这个问题。有人可以向我解释此委托的工作原理吗?

private val viewModel by viewModels<TasksViewModel> { getViewModelFactory() }
Run Code Online (Sandbox Code Playgroud)

其中getViewModelFactory是返回ViewModelFactory的扩展方法,而TasksViewModel是ViewModel()的实例

我的阅读方式类似于:

private val viewModel: TasksViewModel by Fragment.ViewModel(ViewModelFactory)
Run Code Online (Sandbox Code Playgroud)

如果我的理解正确,有人可以详细说明吗?

Paw*_*wel 5

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)
}    
Run Code Online (Sandbox Code Playgroud)