25

I'm working on a small project and trying to use the new navigation architecture components. When i'm trying to add some arguments to a destination i got "Unresolved reference: NavArgs" error.

I followed this guide https://developer.android.com/topic/libraries/architecture/navigation/navigation-pass-data#kotlin and already added

classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha11"

to my project gradle file and also added

apply plugin: 'androidx.navigation.safeargs.kotlin'

to my app gradle file.

As seen in the guide above i want to use val args: AddKittenFragmentArgs by navArgs() to get the passed arguments. But navArgs() isn't recognized.

Also NavArgs in the generated code isn't resolved.

data class MyFragmentArgs(val argOne: String? = "\"\"", val argTwo: String? = "\"\"") : NavArgs
Thomas Meinhart
  • 659
  • 2
  • 7
  • 28

11 Answers11

17

In my case i typed the argument Name starting by a capital letter

        <argument
            android:name="MyArgument" // changed it to myArgument fix the problem
            app:argType="string"
            app:nullable="false" />
Hussien Fahmy
  • 1,119
  • 6
  • 24
12

As per the documentation on that very page:

When using the -ktx dependencies, Kotlin users can also use the by navArgs() property delegate to access arguments.

Make sure you are following the Adding Components documentation and using the navigation-fragment-ktx dependency:

implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0-alpha11"
ianhanniballake
  • 191,609
  • 30
  • 470
  • 443
9

i had the same problem and i solved this by doing following steps

  1. Build -> Clean Project
  2. delete argument from nav_graph.xml file
  3. create new argument
  4. Build -> Rebuild Project
  5. set the argument
val action: NavDirections = AreThereAnyDecayedTeethInTheAreaOfPainFragmentDirections
                .actionAreThereAnyDecayedTeethInTheAreaOfPainFragmentToResultFragment(
                    finalresult = "somethings"
                )
  1. use this argument on FragmentDest
        arguments.let {
            binding.board.text = ResultFragmentArgs.fromBundle(it!!).finalresult
        }
alirezaarzehgar
  • 171
  • 1
  • 8
6

I had the same problem until I realized the navigation component's project dependencies were using a different version than the one specified by the plugin (in the classpath).

i.e. In the project's build.gradle

classpath 'android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-beta01'

in the app build.gradle

// Navigation
implementation 'android.arch.navigation:navigation-fragment-ktx:'+ rootProject.navigationVersion
implementation 'android.arch.navigation:navigation-ui-ktx:' + rootProject.navigationVersion

where navigationVersion was

ext {
   ...
   navigationVersion = "1.0.0-alpha08"
}

lint doesn't tell you there's an update to a library when the dependency is interpolated.

wooldridgetm
  • 2,500
  • 1
  • 16
  • 22
4

I solved this by doing Clean Project from Build menu of Android Studio.

Go to Menu : Build >> Clean Project

Yogesh Umesh Vaity
  • 41,009
  • 21
  • 145
  • 105
  • 1
    I also had all the solutions mentioned above in place thought this is hat solved my problem. – nyxee Jan 01 '20 at 21:25
3

Had the same issue I used "setStartDestination(.." and now it works, instead of using the property access syntax i.e "startDestination=..."

1

just fyi if you want to pass String your argType should be string instead of String.

 app:argType="string"
Ege Kuzubasioglu
  • 5,991
  • 12
  • 49
  • 85
1

In my case I need to added this it in my build.gradle (app)

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8.toString()
}
Álysson Alexandre
  • 1,167
  • 1
  • 8
  • 12
0

Latest release version 1.0.0 seems to have fixed this issue. Just change the navigation dependency version to 1.0.0 along with adding the -ktx dependencies as mentioned in other answers and everything should work.

Ezio
  • 2,837
  • 2
  • 29
  • 45
0

Step 1: Make it sure that your AndroidManifest.xml is containing package name like that -

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.my.app">

Step 2: Use the latest version from here.

Step 3: Clean build the project.

Step 4: Rebuild the project.

Gk Mohammad Emon
  • 6,084
  • 3
  • 42
  • 42
0

I also faced this issue adding id 'androidx.navigation.safeargs.kotlin' this plugin in the corresponding gradle file fixed the issue. We need to clean build once this plugin is added.

Dev
  • 139
  • 2
  • 3