45
votes

Android Studio Build Erreur dans la composante de navigation, l'action n'est pas abstraite et n'implémente pas ActionID des membres abstraits

De nulle part, la construction s'écrase avec une étrange erreur liée au composant de navigation même si elle fonctionnait auparavant, l'erreur est dans la classe générée, dans mon cas nativelanguageselectionfragmentdirections

Voici l'erreur

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

Et voici le code du graphique de navigation

<?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>

J'utilise

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


5 commentaires

Avez-vous essayé d'invalider le cache et de redémarrer?


Oui, c'est sûr, j'ai essayé une autre version Android Studio XD


Cela ressemble à ce problème , mais ce problème n'affecte que la navigation 2.4.0-alpha01. Êtes-vous sûr que vous n'utilisez pas la navigation 2.4.0-alpha01?


Oui, j'utilise Navigation Androidx.Navigation: Navigation-Compose: 2.4.0-alpha01 pour composer car une partie du projet est écrite en compose Android


Même après rétrogradation de la dépendance mentionnée dans mon commentaire précédent sur Androidx.Navigation: Navigation-Compose: 1.0.0-alpha10 , je suis toujours confronté au même problème


7 Réponses :


58
votes

J'ai aussi eu ce problème. Jusqu'à ce qu'ils libèrent le correctif. Veuillez essayer ceci:

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

au lieu de

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


4 commentaires

C'était un moyen rapide de travailler sur le même problème pour moi, merci. Y a-t-il des inconvénients de l'utilisation de la version non Kotlin?


Vous ne pouvez pas utiliser les arguments nommés par exemple.


Quelle est la cause de ce problème? ... Quelle est la différence entre ces deux plugins


@Venkataramanan, pour générer du code de langue java adapté aux modules java ou java et kotlin mixtes utilisez Androidx.navigation.safeargs, pour générer du code kotlin adapté aux modules kotlin-unique : //developer.android.com/guide/navigation/navigation-pass-data#safe-args "rel =" nofollow noreferrer "> ici



11
votes

Depuis la version v2.4.0-alpha02 a été publié, ce bug connu n'est plus présent.

Correction de bugs

  • Les args sûrs ne s'écrasent plus lorsqu'ils tentent de générer une direction Propriétés à Kotlin. ( id2416 , b / 188564435 )

4 commentaires

Vous avez encore ce bug, un correctif?


Le bogue doit être corrigé par cette version. Si le problème persiste pour vous, placez votre commentaire sur le tracker ou créez un nouveau problème.


J'ai le même bug sur '2.4.0-alpha06' donc il n'est pas entièrement corrigé ou une régression s'est produite


Cela ressemble à un bug de régression puis à Michałtajchert, dans un tel cas, je parie qu'il y a un problème existant sur le tracker.



35
votes

Quant à mon cas, j'ai dû mettre à jour le plugin Arg Safe également pour me débarrasser du message d'erreur.

[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'
}


3 commentaires

Cette solution fonctionne pour moi. Passer de "2.3.5" en "2.4.0-alpha04" Correction de mon erreur. J'ai des avertissements ⚠ lors de la construction, mais fonctionne. Merci


Merci, ça a aidé!


Merci, j'ai juste oublié de mettre à jour le nav_version de Androidx.navigation: navigation-safe-args-gradle-Plugin: $ NAV_‌ version dans le fichier gradle de niveau supérieur à Le même nave_version qui se trouve dans le fichier gradle du module.



9
votes

Toutes ces dépendances xxx

doivent utiliser la même version - Ex: Au moment de l'écriture, c'est 2.4.0-alpha10


0 commentaires

0
votes

2.4.0-beta02 en ce moment disponible


0 commentaires

2
votes

Mettez simplement à jour la dépendance des args de sécurité à la dernière version (> = 2.4.0-rc01) !:

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


0 commentaires

1
votes

Dans mon cas, j'obtiens cette erreur pour mon nouveau module . J'ai ajouté le safe-args classpath dans build.gradle (project)

kotlin-dsl:

id 'androidx.navigation.safeargs.kotlin'

sans plonger dans mon module build.gradle. J'ai donc ajouté ceci en haut de build.gradle :

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

groovy:

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


0 commentaires