Я использую компоненты архитектуры навигации, и я хотел воспользоваться преимуществами плагина safe args.
Я хочу добавить несколько аргументов к одному из моих фрагментов в навигационном графе. Код аргументов создается с помощью редактора дизайна. Вот отрывок:
<fragment
android:id = "@+id/inAppPurchaseFragment"
android:name = "purchaseFragment" >
<argument
android:name = "attribution_id"
app:type = "string" />
</fragment>
Однако я получаю сообщение об ошибке в Android Studio (3.2 Canary 16), в котором говорится, что он не может разрешить строку символа или любой тип, который я пытаюсь использовать. У кого-нибудь из вас была эта проблема, и знаете ли вы, почему она возникает?
Обновите для большего контекста; Я получаю эту ошибку во время сборки в строке с app:type = "string":
error: 'string' is incompatible with attribute type (attr) integer.
Ваш код выглядит хорошо, убедитесь, что вы добавили к нему defaultValue
android:defaultValue = "something"
И, кстати, вы реализовали Navigation Architecture Components, как написано на adding-components documentation?
dependencies {
def nav_version = "1.0.0-alpha02"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // use -ktx for Kotlin
implementation "android.arch.navigation:navigation-ui:$nav_version" // use -ktx for Kotlin
// optional - Test helpers
androidTestImplementation "android.arch.navigation:navigation-testing:$nav_version" // use -ktx for Kotlin
}
Да, я следил за этим руководство несколько дней назад, и это сработало. Также, если вы хотите начать с 0, посмотрите этот Видеоурок
Ничего страшного, у меня уже есть рабочий график навигации. Я просто хотел использовать безопасные аргументы, чтобы связать все это воедино. Я подозреваю, что это как-то связано с рисованием ресурсов.
@SabaImran Я тебя не понимаю
Не забудьте поставить
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha02"
на уровне вашего проекта build.gradle
и положи
apply plugin: 'androidx.navigation.safeargs'
на уровне вашего приложения build.gradle.
.................
android:defaultValue не является обязательным
Согласно документации, я заменил
<argument
...
app:type = "string"
.../>
к
<argument
...
app:argType = "string"
.../>
и это сработало для меня.
В моем случае я переместил класс, который использовал как Argument, из одного пакета в другой. Чтобы решить проблему, я переписал правильный путь для класса внутри app:argType.
Эта проблема возникает из-за того, что даже если вы нажмете «Refractor» при перемещении класса из пакета в другой, путь внутри app:argType не изменится.
Да, я настроил его в соответствии с документацией по добавлению компонентов. Это сработало для вас? Удалось ли вам использовать безопасные аргументы? Кроме того, удалось ли вам установить тип, который вы сами определили с помощью
app:type?