Почему студия Android не генерирует код для всех безопасных аргументов?

Я использую safe-args для передачи аргументов из одного фрагмента в другой. Студия Android периодически генерирует класс fragmentArgs со всеми аргументами.

То, что я пробовал и действительно работает, - это изменение файла навигационного графика, создание проекта, затем отмена этих изменений и, наконец, создание проекта снова.

Используемые зависимости:

Модуль проекта:

ext.nav_version = '2.2.0-beta01'

classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"

Модуль приложения:

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

    <fragment
            android:id="@+id/someFragment"
            android:name="package_name.SomeFragment"
            android:label="@string/some_fragment">
        <argument
                android:name="source"
                android:defaultValue="-1"
                app:argType="integer" />
        <argument
                android:name="nationalId"
                android:defaultValue="-1"
                app:argType="integer" />
        <argument
                android:name="hudumaNumber"
                android:defaultValue="-1"
                app:argType="string" />
        <argument
                android:name="middleName"
                android:defaultValue="None"
                app:argType="string" />

    </fragment>

Я ожидаю, что все аргументы будут найдены в сгенерированном классе, но это не так.


person wamae    schedule 12.11.2019    source источник
comment
покажите нам код сгенерированных классов   -  person coroutineDispatcher    schedule 12.11.2019
comment
Я объяснил это там, проверьте эту ссылку: stackoverflow.com/a/68131901/7345214   -  person Babak Karchini    schedule 25.06.2021


Ответы (3)


Попробуйте переключиться на:

apply plugin: "androidx.navigation.safeargs"

вместо того:

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

Это сгенерирует код Java вместо кода Kotlin внутри вашей папки app \ build \ created. Это не влияет на ваш собственный код, и вы можете продолжать использовать Kotlin или Java для своих фрагментов.

person Stephen Mullen    schedule 16.01.2020
comment
Переход на androidx.navigation.safeargs действительно помог. Интересно, почему это происходит? - person qki; 27.01.2021
comment
у меня сработало !!! Благодарность - person Kirguduck; 23.05.2021

Вам просто нужно перестроить свой проект,

  1. Удалите все строки, которые вызывают ошибку.
  2. Восстановите свой проект
  3. Добавьте эти строки снова
person Mahmoud Hendi    schedule 03.05.2020

Моя проблема заключалась в том, что я удалил атрибут name в nav_graph.xml

 <fragment
        android:id="@+id/emailVerifyFragment"
        android:name="com.package.name.EmailVerifyFragment" <<<--- this is necessary!
        tools:layout="@layout/fragment_email_address_verify">
person MSpeed    schedule 10.06.2021