Неразрешенная ссылка: 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" />
У меня была такая же проблема, и я решил ее, выполнив следующие шаги
-
Build -> Clean Project
- удалить аргумент из
nav_graph.xml
файл - создать новый аргумент
-
Build -> Rebuild Project
- установить аргумент
val action: NavDirections = AreThereAnyDecayedTeethInTheAreaOfPainFragmentDirections
.actionAreThereAnyDecayedTeethInTheAreaOfPainFragmentToResultFragment(
finalresult = "somethings"
)
- используйте этот аргумент в 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, исправив проблему. Нам нужно очистить сборку после добавления этого плагина.