3

Android Studio -> New Project -> Choice "Tabbed Activity".

After upgrading lifecycle-extensions from 2.1.0 to 2.2.0-alpha05 ViewModelProviders is deprecated. In simple cases it replaceable by "by viewModels()" for example:

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

replaced by:

private val plHlFrModel by viewModels<PlHlFrModel>()

But I can't figure out how to replace this one:

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

where and how to place apply{} block in a "by viewModel" form? Maybe there is another way?

Vsevolod
  • 332
  • 4
  • 10

4 Answers4

4

Instead of using ViewModelProviders.of(this) use ViewModelProvider(This) new ViewModelProvider(this).get(Vm.class); for java

nik
  • 345
  • 1
  • 9
  • How can I implement this by Java? ViewModelProvider(this).get(MyViewModel.class) not work for Java ('androidx.lifecycle:lifecycle-extensions:2.2.0-rc03') – A.M. Dec 06 '19 at 14:01
4

ViewModelProviers is deperecated, we just use ViewModelProvider.

Direct access

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

using delegate

private val pageViewModel by viewModels<PageViewModel>()

//function scope
pageViewModel.setIndex(arguments?.getInt(ARG_SECTION_NUMBER) ?: 1)
Ethan Choi
  • 2,339
  • 18
  • 28
1
viewModel = ViewModelProviders.of(this).get(vm.class); // is deprecate

viewModel = new ViewModelProvider(this).get(vm.class); // is true
Meysam Keshvari
  • 1,141
  • 12
  • 14
1
viewModel = new ViewModelProvider(this).get(vm.class);

This will work only with this dependency:

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