'ViewModelProviders' 已弃用。将 lifecycle-extensions:2.1.0 升级到 2.2.0-alpha05 后

'ViewModelProviders' is deprecated. After upgrading lifecycle-extensions:2.1.0 to 2.2.0-alpha05

Android 工作室 -> 新项目 -> 选择 "Tabbed Activity"。

将生命周期扩展从 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{} 块? 也许还有其他方法?

而不是使用 ViewModelProviders.of(this) 使用 ViewModelProvider(This) new ViewModelProvider(this).get(Vm.class); 代替 java

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)
viewModel = ViewModelProviders.of(this).get(vm.class); // is deprecate

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

这仅适用于以下依赖项:

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