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?
Si tuviera un ViewModel simple que extendiera AndroidViewModel sin ningún parámetro de construcción adicional, es el siguiente
- Extienda AndroidViewModel sin ningún parámetro de constructor adicional
class FooViewModel(application: Application) : AndroidViewModel(application) {}
- 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
- Extienda AndroidViewModel con cualquier parámetro de constructor adicional
class FooViewModel(application: Application, foo: Foo) : AndroidViewModel(application) {}
- 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 } }
- Crear modelo de vista en actividad
val viewModel = ViewModelProvider(this, FooViewModelFactory(application, foo)).get(FooViewModel::class.java)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 }puedes probar este codigo
ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(UserViewModel::class.java)