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 pudo encontrar `activityViewModels()` en Hilt Android.

Estoy utilizando Hilt y MVVM en mi proyecto y quiero obtener un viewModel de activityViewModel para usarlo en 2 actividades. Pero mi Android Studio dice “Referencia no resuelta”.

Mi archivo build.gradle de la aplicación se ve así:

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
}

dependencies {

...

implementation "com.google.dagger:hilt-android:2.38.1"
kapt "com.google.dagger:hilt-android-compiler:2.38.1"

implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0'

implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03'
kapt 'androidx.hilt:hilt-compiler:1.0.0'
...
}

Mi archivo build.gradle del proyecto se ve así:

classpath 'com.google.dagger:hilt-android-gradle-plugin:2.38.1'

Estoy intentando obtener el ViewModel de esta manera:

private val viewModel: SelectWifiViewModel by activityViewModels()
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para utilizar activityViewModels() para obtener un ViewModel compartido entre dos actividades con la arquitectura Hilt y MVVM, debes asegurarte de haber incluido las dependencias y complementos correctos en tus archivos build.gradle.

    Primero, asegúrate de haber aplicado el complemento dagger.hilt.android.plugin en el archivo build.gradle de tu aplicación de la siguiente manera:

    plugins {
        id 'com.android.application'
        id 'kotlin-android'
        id 'kotlin-kapt'
        id 'dagger.hilt.android.plugin'
    }
    

    Luego, agrega las dependencias de Hilt y ViewModel en el archivo build.gradle de tu aplicación:

    dependencies {
        // Hilt
        implementation "com.google.dagger:hilt-android:2.38.1"
        kapt "com.google.dagger:hilt-android-compiler:2.38.1"
    
        implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0'
        implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03'
        kapt 'androidx.hilt:hilt-compiler:1.0.0'
    
        // Otras dependencias
        // ...
    }
    

    A continuación, asegúrate de haber aplicado el complemento com.google.dagger:hilt-android-gradle-plugin en el archivo build.gradle de tu proyecto de la siguiente manera:

    buildscript {
        repositories {
            // ...
        }
        dependencies {
            // ...
            classpath 'com.google.dagger:hilt-android-gradle-plugin:2.38.1'
        }
    }
    

    Finalmente, para obtener el ViewModel compartido en dos actividades utilizando activityViewModels(), debes asegurarte de que ambas actividades estén anotadas con @AndroidEntryPoint.

    En tus actividades:

    @AndroidEntryPoint
    class MainActivity : AppCompatActivity() {
        private val viewModel: SelectWifiViewModel by activityViewModels()
        // ...
    }
    
    @AndroidEntryPoint
    class SecondActivity : AppCompatActivity() {
        private val viewModel: SelectWifiViewModel by activityViewModels()
        // ...
    }
    

    Esto debería resolver el error de Referencia no resuelta y permitirte utilizar el ViewModel compartido entre dos actividades utilizando la arquitectura Hilt y MVVM.

Comments are closed.