es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede crear el ViewModel desde ViewModelProvider.

Recientemente, intenté desarrollar una aplicación que tuviera la misma vista en diferentes módulos, por lo que intenté reutilizar el ViewModel.
Aquí está la clase ViewModel:

class ChooseDataViewModel<t extends="" dataselectable="">(application: Application) :
    AndroidViewModel(application) {
    val title = MutableLiveData<string>()
    private val mData = MutableLiveData<><t>>()
}

class ClassA: DataSelectable{}
class ClassB: DataSelectable{}

En el fragmento intenté crear el viewModel con el tipo de datos como ClassB utilizando este método:

viewModel = ViewModelProvider(navBackStackEntry).get(ChooseDataViewModel::class.java)

Pero el compilador muestra un mensaje de error:

Coincidencia de tipos.
Se requiere: ChooseDataViewModel<t>?
Encontrado: ChooseDataViewModel<*>

Investigué mucho en Internet, pero no puedo encontrar la solución para resolver este problema.

¿Podrías ayudarme a resolver este problema? Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que al crear la instancia de ViewModel, no se especifica el parámetro de tipo para T. Para resolver esto, puedes especificar el parámetro de tipo al crear la instancia de ViewModel de la siguiente manera:

    viewModel = ViewModelProvider(navBackStackEntry).get(ChooseDataViewModel<classb>::class.java)
    

    Esto especifica el parámetro de tipo para T como ClassB.

    Alternativamente, también puedes actualizar la declaración de viewModel en el fragmento para incluir el parámetro de tipo:

    private lateinit var viewModel: ChooseDataViewModel<classb>
    

    De esta manera, el parámetro de tipo se declara explícitamente y el compilador no mostrará un error.

Comments are closed.