Error de compilación de Android Studio en el componente de navegación, la acción no es abstracta y no implementa el ID de acción del miembro abstracto

5 minutos de lectura

avatar de usuario
David Ibrahim

De la nada, la compilación falla con un extraño error relacionado con el componente de navegación, aunque antes funcionaba, el error está en la clase generada, en mi caso NativeLanguageSelectionFragmentDirections

aquí está el error

e: C:\Users\David\StudioProjects\android\app\build\generated\source\navigation-args\debug\com\linguistic\linguistic\framework\presentation\loginscreens\ui\main\NativeLanguageSelectionFragmentDirections.kt: (10, 16): Class 'GoToSelectLearningLangAction' is not abstract and does not implement abstract member public abstract val actionId: Int defined in androidx.navigation.NavDirections
e: C:\Users\David\StudioProjects\android\app\build\generated\source\navigation-args\debug\com\linguistic\linguistic\framework\presentation\loginscreens\ui\main\NativeLanguageSelectionFragmentDirections.kt: (13, 12): 'getActionId' overrides nothing
e: C:\Users\David\StudioProjects\android\app\build\generated\source\navigation-args\debug\com\linguistic\linguistic\framework\presentation\loginscreens\ui\main\NativeLanguageSelectionFragmentDirections.kt: (15, 12): 'getArguments' overrides nothing

Y aquí está el código del gráfico de navegación.

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/first_login_graph.xml"
    app:startDestination="@id/nativeLanguageSelectionFragment">

    <fragment
        android:id="@+id/nativeLanguageSelectionFragment"
        android:name="com.linguistic.linguistic.framework.presentation.loginscreens.ui.main.NativeLanguageSelectionFragment"
        android:label="NativeLanguageSelectionFragment"
        tools:layout="@layout/language_selection_fragment">
        <action
            android:id="@+id/goToSelectLearningLangAction"
            app:destination="@id/learningLanguageSelectionFragment"
            app:enterAnim="@anim/slide_in_right"
            app:exitAnim="@anim/slide_out_left"
            app:popEnterAnim="@anim/slide_in_left"
            app:popExitAnim="@anim/slide_out_right"
            app:popUpTo="@id/nativeLanguageSelectionFragment"
            app:popUpToInclusive="true" />
    </fragment>
    <fragment
        android:id="@+id/learningLanguageSelectionFragment"
        android:name="com.linguistic.linguistic.framework.presentation.loginscreens.ui.main.LearningLanguageSelectionFragment"
        android:label="LearningLanguageSelectionFragment"
        tools:layout="@layout/language_selection_fragment">
        <argument
            android:name="nativeLanguageID"
            app:argType="string"
            app:nullable="true" />
        <action
            android:id="@+id/action_learningLanguageSelectionFragment_to_welcomeFragment"
            app:destination="@id/welcomeFragment"
            app:enterAnim="@anim/slide_in_right"
            app:exitAnim="@anim/slide_out_left"
            app:popEnterAnim="@anim/slide_in_left"
            app:popExitAnim="@anim/slide_out_right"
            app:popUpTo="@id/learningLanguageSelectionFragment"
            app:popUpToInclusive="true" />
    </fragment>
    <fragment
        android:id="@+id/welcomeFragment"
        android:name="com.linguistic.linguistic.framework.presentation.loginscreens.ui.main.WelcomeFragment"
        android:label="fragment_welcome"
        tools:layout="@layout/fragment_welcome" />
</navigation>

estoy usando

 "androidx.navigation:navigation-fragment-ktx:2.3.5"
 "androidx.navigation:navigation-ui-ktx:2.3.5"

  • ¿Intentaste invalidar el caché y reiniciar?

    – rey

    19 mayo 2021 a las 19:55

  • Sí, seguro, probé otra versión de Android Studio xD

    –David Abraham

    19 mayo 2021 a las 19:58


  • Eso suena como este problema, pero ese problema solo afecta a Navigation 2.4.0-alpha01. ¿Estás seguro de que no estás usando Navigation 2.4.0-alpha01?

    – ianhanniballake

    19 mayo 2021 a las 20:10

  • sí, estoy usando la navegación androidx.navigation:navigation-compose:2.4.0-alpha01 para componer ya que parte del proyecto está escrito en android componer

    –David Abraham

    19 mayo 2021 a las 20:13

  • incluso después de degradar la dependencia mencionada en mi comentario anterior a androidx.navigation:navigation-compose:1.0.0-alpha10sigo enfrentando el mismo problema

    –David Abraham

    20 de mayo de 2021 a las 7:24

También tuve este problema. Hasta que suelten el arreglo. Por favor, intente esto:

plugins {
  id("androidx.navigation.safeargs")
}

en vez de

plugins {
  id("androidx.navigation.safeargs.kotlin")
}

  • Esta fue una forma rápida de solucionar el mismo problema para mí, gracias. ¿Hay algún inconveniente de usar la versión que no es de Kotlin?

    – Martín Gunnarsson

    1 de noviembre de 2021 a las 12:38

  • No puede usar argumentos con nombre, por ejemplo.

    – peshkirá

    16 de noviembre de 2021 a las 10:55

  • ¿Cuál es la causa de este problema?… ¿Cuál es la diferencia entre estos dos complementos?

    – Venkataramanan

    7 de marzo a las 6:59

  • @Venkataramanan, para generar código de lenguaje Java adecuado para Java o módulos mixtos de Java y Kotlin, use androidx.navigation.safeargs, para generar código de Kotlin adecuado para módulos solo de Kotlin, use androidx.navigation.safeargs.kotlin, de aquí

    – Yura Shinkarev

    4 de mayo a las 8:21

En cuanto a mi caso, también tuve que actualizar el complemento Safe Arg para deshacerme del mensaje de error.

[build.gradle]
buildscript {
    ...
    dependencies {
        ...
        classpath 'androidx.navigation:navigation-safe-args-gradle-plugin:2.4.0-alpha04'
}

[app/build.gradle]
dependencies {
    ...
    implementation 'androidx.fragment:fragment-ktx:1.4.0-alpha04'
    api 'androidx.navigation:navigation-fragment-ktx:2.4.0-alpha04'
    api 'androidx.navigation:navigation-ui-ktx:2.4.0-alpha04'
}

  • Esta solución funciona para mí. Cambiar de “2.3.5” a “2.4.0-alpha04” corrige mi error. Recibí algunas advertencias ⚠ al construir, pero funciona. Gracias

    – CuarzoZ

    17 de julio de 2021 a las 20:03

  • ¡Gracias, ayudó!

    – Simonov Dmitry

    6 sep 2021 a las 20:29

  • Gracias, me olvidé de actualizar el nav_version de androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version en el archivo gradle de nivel superior al mismo nave_version que está en el archivo gradle del módulo.

    – James Bond

    19 de diciembre de 2021 a las 11:37

Desde la versión v2.4.0-alfa02 fue lanzado, este error conocido ya no está presente.

Corrección de errores

  • Safe Args ya no falla al intentar generar propiedades de dirección en Kotlin. (Id2416, b/188564435)

  • Todavía tienes este error, ¿alguna solución?

    – Raunak Verma

    6 de julio de 2021 a las 15:11

  • El error debería corregirse en esa versión. Si el problema persiste para usted, coloque su comentario en el rastreador o cree un nuevo problema.

    – GoRoS

    6 de julio de 2021 a las 17:57

  • Obtuve el mismo error en ‘2.4.0-alpha06’, por lo que no está completamente solucionado o ocurrió alguna regresión

    – Michael Tajchert

    8 de septiembre de 2021 a las 9:36

  • Suena como un error de regresión, entonces @MichałTajchert, en tal caso, apostaría a que hay un problema existente en el rastreador.

    – GoRoS

    8 sep 2021 a las 17:50

Todas estas dependencias

androidx.navigation:navigation-fragment-ktx
androidx.navigation:navigation-ui-ktx
androidx.navigation:navigation-safe-args-gradle-plugin

necesita estar usando la misma versión – ej: al momento de escribir esto es 2.4.0-alpha10

avatar de usuario
imansdn

¡simplemente actualice la dependencia de argumentos seguros a la última versión (> = 2.4.0-rc01) también!:

classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.4.0-rc01"

avatar de usuario
Sana Ebadi

en mi caso, me sale este error para mi nuevo module. agregué el safe-args classPath en build.gradle (project)

KOTLIN-DSL:

    "classpath"(group = "androidx.navigation",name = "navigation-safe-args-gradle-plugin", version = "2.4.1")

sin sumergirme en mi módulo build.gradle. así que agregué esto encima de build.gradle:

id("androidx.navigation.safeargs.kotlin")

MARAVILLOSO:

classpath  "navigation-safe-args-gradle-plugin : 2.4.1"

y:

id 'androidx.navigation.safeargs.kotlin'

avatar de usuario
Vladímir Koltunov

2.4.0-beta02 en este momento disponible

¿Ha sido útil esta solución?