Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.1K
Visualizações
In kotlin how to use ViewModel With ViewModelProvider.AndroidViewModelFactory?

In my current project I use the next line:

mViewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)

For instance a ViewModel but in https://developer.android.com/reference/android/arch/lifecycle/ViewModelProviders.html#ViewModelProviders() recommend use ViewModelProvider.AndroidViewModelFactory because ViewModelProviders() was deprecated in API level 1.1.0.

any idea for this purpose?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

If you had a simple ViewModel extending AndroidViewModel without any additional constructor parameters, its as follows

  1. Extend AndroidViewModel without any additional constructor parameters
class FooViewModel(application: Application) : AndroidViewModel(application) {}
  1. Create View Model in Activity
val viewModel = ViewModelProvider(this).get(FooViewModel::class.java)

But if you had a ViewModel extending AndroidViewModel with any additional constructor parameters, its as follows

  1. Extend AndroidViewModel with any additional constructor parameters
class FooViewModel(application: Application, foo: Foo) : AndroidViewModel(application) {}
  1. Create a new view model factory extending ViewModelProvider.AndroidViewModelFactory
class FooViewModelFactory(val application: Application, val foo: Foo): ViewModelProvider.AndroidViewModelFactory(application) {

            override fun <T : ViewModel?> create(modelClass: Class<T>): T {
                return FooViewModel(
                    application, foo
                ) as T
            }

     }
  1. Create View Model in Activity
val viewModel = ViewModelProvider(this, FooViewModelFactory(application, foo)).get(FooViewModel::class.java)
over 4 years ago · Santiago Trujillo Relatório

0

EDIT: The original question is now irrelevant, as you should no longer use the ViewModelProviders utility class. Instead, you should create a ViewModelProvider instance like so:

val viewModel = ViewModelProvider(thisFragment).get(MyViewModel::class.java)

Original answer below.


ViewModelProviders is just a utility class with static methods, there's no need to instantiate it (there are no instance methods in it anyway), so the constructor being deprecated shouldn't be a concern.

The way you use it is by calling its appropriate of method for your use case, passing in a Fragment or Activity, and then calling get on the ViewModelProvider it returns:

val viewModel = ViewModelProviders.of(thisFragment).get(MyViewModel::class.java)

If you don't provide your own factory in the second parameter of the of method, AndroidViewModelFactory will be used by default. This implementation can either create ViewModel subclasses that have no constructor parameters, or ones that extend AndroidViewModel, like such:

class MyViewModel(application: Application) : AndroidViewModel(application) {

    // use application

}
over 4 years ago · Santiago Trujillo Relatório

0

you can try this code

    ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(UserViewModel::class.java)
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda