Неразрешенная ссылка: NavArgs после добавления некоторых аргументов к месту назначения

Я работаю над небольшим проектом и пытаюсь использовать новые компоненты архитектуры навигации. Когда я пытаюсь добавить некоторые аргументы в пункт назначения, я получаю сообщение об ошибке "Unresolved reference: NavArgs".

Я следовал этому руководству https://developer.android.com/topic/libraries/architecture/navigation/navigation-pass-data и уже добавил

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

в мой проект Gradle файл, а также добавил

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

на мой файл приложения Gradle.

Как видно из руководства выше, я хочу использовать val args: AddKittenFragmentArgs by navArgs() чтобы получить переданные аргументы. Но navArgs() не признается

Также NavArgs в сгенерированном коде не разрешено.

data class MyFragmentArgs(val argOne: String? = "\"\"", val argTwo: String? = "\"\"") : NavArgs

12 ответов

Решение

Согласно документации на этой самой странице:

При использовании -ktx зависимости, пользователи Kotlin также могут использовать делегат свойства by navArgs() для доступа к аргументам.

Убедитесь, что вы следуете документации Adding Components и используете navigation-fragment-ktx зависимость:

implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0-alpha11"

В моем случае я набрал имя аргумента, начиная с заглавной буквы

              <argument
            android:name="MyArgument" // changed it to myArgument fix the problem
            app:argType="string"
            app:nullable="false" />

У меня была такая же проблема, и я решил ее, выполнив следующие шаги

  1. Build -> Clean Project
  2. удалить аргумент из nav_graph.xml файл
  3. создать новый аргумент
  4. Build -> Rebuild Project
  5. установить аргумент
      val action: NavDirections = AreThereAnyDecayedTeethInTheAreaOfPainFragmentDirections
                .actionAreThereAnyDecayedTeethInTheAreaOfPainFragmentToResultFragment(
                    finalresult = "somethings"
                )
  1. используйте этот аргумент в FragmentDest
              arguments.let {
            binding.board.text = ResultFragmentArgs.fromBundle(it!!).finalresult
        }

У меня была та же проблема, пока я не понял, что зависимости проекта компонента навигации используют версию, отличную от указанной плагином (в classpath).

т.е. в проекте build.gradle

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

в приложении build.gradle

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

где навигационная версия была

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

lint не говорит вам, что есть обновление библиотеки, когда зависимость интерполируется.

Я решил это, делая Clean Project из Build Меню Android Studio.

Перейти в меню: Build >> Clean Project

Была та же проблема, я использовал «setStartDestination (..», и теперь это работает, вместо использования синтаксиса доступа к свойству, т.е. «startDestination =...»

Просто fyi, если вы хотите пройти String ваш argType должен быть string вместо String.

 app:argType="string"

В моем случае мне нужно добавить это в свой build.gradle (приложение)

      kotlinOptions {
    jvmTarget = '1.8'
}

Шаг 1: Убедитесь, что вашAndroidManifest.xmlсодержит такое имя пакета -

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

Шаг 2: Используйте последнюю версию отсюда .

Шаг 3: Clean buildпроект.

Шаг 4: Rebuildпроект.

Последняя версия 1.0.0, похоже, исправила эту проблему. Просто измените версию зависимости навигации на 1.0.0 наряду с добавлением -ktx зависимости, как указано в других ответах, и все должно работать.

У меня была такая же проблема, но с -ktx расширение. Чистая сборка работала на меня.

Я также столкнулся с этой проблемой, добавив идентификатор 'androidx.navigation.safeargs.kotlin' этого плагина в соответствующий файл gradle, исправив проблему. Нам нужно очистить сборку после добавления этого плагина.

Другие вопросы по тегам