不推荐使用“ ViewModelProviders”。将生命周期扩展从2.1.0升级到2.2.0-alpha05之后

时间:2019-09-28 13:03:54

标签: android android-viewmodel kotlin-android-extensions

Android Studio->新建项目->选择“标记的活动”。

将生命周期扩展从2.1.0升级到2.2.0-alpha05后,不建议使用ViewModelProviders。 在简单的情况下,它可以由“ by viewModels()”替换 例如:

plHlFrModel = ViewModelProviders.of(this).get(PlHlFrModel::class.java)

替换为:

private val plHlFrModel by viewModels<PlHlFrModel>()

但是我不知道该如何替换:

pageViewModel =  ViewModelProviders.of(this)
     .get(PageViewModel::class.java).apply {
         setIndex(arguments?.getInt(ARG_SECTION_NUMBER) ?: 1)
      }

以“ by viewModel”形式在哪里放置apply {}块? 也许还有另一种方法?

4 个答案:

答案 0 :(得分:2)

而不是使用ViewModelProviders.of(this)来为Java使用ViewModelProvider(This) new ViewModelProvider(this).get(Vm.class);

答案 1 :(得分:1)

ViewModelProviers已过时,我们只使用ViewModelProvider

直接访问

pageViewModel = ViewModelProvider(this)
     .get(PageViewModel::class.java).apply {
         setIndex(arguments?.getInt(ARG_SECTION_NUMBER) ?: 1)
      }

使用委托

private val pageViewModel by viewModels<PageViewModel>()

//function scope
pageViewModel.setIndex(arguments?.getInt(ARG_SECTION_NUMBER) ?: 1)

答案 2 :(得分:1)

viewModel = ViewModelProviders.of(this).get(vm.class); // is deprecate

viewModel = new ViewModelProvider(this).get(vm.class); // is true

答案 3 :(得分:1)

viewModel = new ViewModelProvider(this).get(vm.class);

这仅在具有这种依赖性的情况下起作用:

implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'