Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 597
Vsevolod Avatar asked Oct 28 '25 18:10

Vsevolod


2 Answers

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)
like image 65
Ethan Choi Avatar answered Oct 31 '25 10:10

Ethan Choi


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

like image 23
nik Avatar answered Oct 31 '25 09:10

nik