Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.1K
Views
En kotlin, ¿cómo usar ViewModel con ViewModelProvider.AndroidViewModelFactory?

En mi proyecto actual, uso la siguiente línea:

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

Por ejemplo, un ViewModel pero en https://developer.android.com/reference/android/arch/lifecycle/ViewModelProviders.html#ViewModelProviders() recomienda usar ViewModelProvider.AndroidViewModelFactory porque ViewModelProviders() quedó obsoleto en el nivel de API 1.1.0.

alguna idea para este fin?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Si tuviera un ViewModel simple que extendiera AndroidViewModel sin ningún parámetro de construcción adicional, es el siguiente

  1. Extienda AndroidViewModel sin ningún parámetro de constructor adicional
 class FooViewModel(application: Application) : AndroidViewModel(application) {}
  1. Crear modelo de vista en actividad
 val viewModel = ViewModelProvider(this).get(FooViewModel::class.java)

Pero si tuviera un ViewModel que extendiera AndroidViewModel con cualquier parámetro de constructor adicional, es el siguiente

  1. Extienda AndroidViewModel con cualquier parámetro de constructor adicional
 class FooViewModel(application: Application, foo: Foo) : AndroidViewModel(application) {}
  1. Cree una nueva fábrica de modelos de vista que amplíe 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. Crear modelo de vista en actividad
 val viewModel = ViewModelProvider(this, FooViewModelFactory(application, foo)).get(FooViewModel::class.java)
over 4 years ago · Santiago Trujillo Report

0

EDITAR: la pregunta original ahora es irrelevante, ya que ya no debe usar la clase de utilidad ViewModelProviders . En su lugar, debe crear una instancia de ViewModelProvider así:

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

Respuesta original a continuación.


ViewModelProviders es solo una clase de utilidad con métodos estáticos, no es necesario crear una instancia (de todos modos, no hay métodos de instancia), por lo que el constructor en desuso no debería ser una preocupación.

La forma en que lo usa es llamando al método apropiado para su caso of uso, pasando un Fragment o Activity , y luego llamando a get en el ViewModelProvider que devuelve:

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

Si no proporciona su propia fábrica en el segundo parámetro of , AndroidViewModelFactory se usará de manera predeterminada. Esta implementación puede crear subclases de ViewModel que no tengan parámetros de constructor, o que amplíen AndroidViewModel , como por ejemplo:

 class MyViewModel(application: Application) : AndroidViewModel(application) { // use application }
over 4 years ago · Santiago Trujillo Report

0

puedes probar este codigo

 ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(UserViewModel::class.java)
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!