为什么 android studio 没有为所有安全参数生成代码?

Why is android studio not generating code for all the safe args?

我正在使用安全参数将参数从一个片段传递到另一个片段。 Android studio 间歇性地生成包含所有参数的 fragmentArgs class。

我已经尝试过并且确实有效的方法是更改​​导航图文件,制作项目,然后撤消这些更改,最后再次制作项目。

使用的依赖项:

项目模块:

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>

我希望在生成的 class 中找到所有参数,但事实并非如此。

尝试切换到:

apply plugin: "androidx.navigation.safeargs"

而不是:

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

这将在您的 app\build\generated 文件夹中生成 Java 代码而不是 Kotlin 代码。这不会影响您自己的代码,您可以继续为您的片段使用 Kotlin 或 Java。

你只需要重建你的项目,

  1. 暂时删除所有导致错误的行
  2. 重建你的项目
  3. 再次添加这些行

我的问题是我删除了 nav_graph.xml

中的 name 属性
 <fragment
        android:id="@+id/emailVerifyFragment"
        android:name="com.package.name.EmailVerifyFragment" <<<--- this is necessary!
        tools:layout="@layout/fragment_email_address_verify">