为什么Android Studio不为所有安全参数生成代码?

时间:2019-11-12 08:09:49

标签: android kotlin android-safe-args

我正在使用safe-args将参数从一个片段传递到另一个。 Android Studio会间歇性地生成带有所有参数的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>

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

4 个答案:

答案 0 :(得分:6)

尝试切换到:

apply plugin: "androidx.navigation.safeargs"

代替:

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

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

答案 1 :(得分:2)

您只需要重建项目,

  1. 删除目前引起错误的所有行
  2. 重建项目
  3. 再次添加这些行

答案 2 :(得分:0)

我的问题是我删除了 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">

答案 3 :(得分:-1)

来自文档 Pass data between destinations

  

启用安全Args后,您生成的代码包含以下内容   每个动作以及每个动作的类型安全类和方法   发送和接收目的地

所以您必须添加

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