通过 by
委托关键字更方便的创建 ViewModel。在 Activity/Fragment OnCreate
的时候自动创建 ViewMdoel
implementation 'com.lwjlol.viewmodelktx:viewmodel-ktx:0.0.3'
- lazyActivityViewModel()
获取 Activity 的 ViewModel,用于和 Activity 和 Fragment 共享一个 ViewModel 的情况。
- lazyFragmentViewModel()
获取 Fragment 的 ViewModel
- lazyParentFragmentViewModel()
子 Fragment 获取父 Fragment 的 ViewModel,用于和父 Fragment 和 子 Fragment 共享一个 ViewModel 的情况。
- 在 Activity 中创建:
class MainActivity : AppCompatActivity() {
private val viewModel by lazyActivityViewModel<ActivityViewModel>()
...
}
- 在 Fragment 中创建:
class SampleFragment:Fragment(){
private val activityViewModel by lazyActivityViewModel<ActivityViewModel>()
private val fragmentViewModel by lazyFragmentViewModel<FragmentViewModel>()
}
- 在 View 中懒加载 Activity 的 ViewModel:
class MyView(context: Context):View(context) {
private val viewModel by lazyActivityViewModel<ActivityViewModel>()
}
- 通过 View 直接获取 Activity 的 ViewModel
view.getActivityViewModel<ActivityViewModel>()
每个方法都可以传入 factory 和 key 参数。注意,factory
和 key
都是 function
类型的。因为要懒加载,所以不能直接传入值。
private val viewModel by lazyActivityViewModel<ActivityViewModel>(
factory = {
ViewModelFactoy()
},
key = {
"your key"
}
)