Safeargs库不会生成方向类

ksg*_*rkn 24 kotlin android-navigation android-jetpack

我使用导航库和safeargs来传递数据.我像这样定义片段的参数.

<fragment
        android:id="@+id/otherFragment"
        android:name="com.asd.navigate.OtherFragment"
        android:label="OtherFragment">
        <argument
            android:name="screenTitle"
            android:defaultValue="0"
            app:type="string" />
    </fragment>
Run Code Online (Sandbox Code Playgroud)

生成的OtherFragmentArgs,我可以使用它但是当我单击"make project"时,OtherFragmentDirection类不生成.是那个错误还是我必须做一些与众不同的事情.

Thnx的建议.

buildscript {
    ...
    dependencies {
       ...
        classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha01"

    }
}
Run Code Online (Sandbox Code Playgroud)

的build.gradle

apply plugin: "androidx.navigation.safeargs"
Run Code Online (Sandbox Code Playgroud)

MainActivity.kt

在此输入图像描述

San*_*eev 64

我忘了在app.gradle文件中应用插件,只需添加这一行

apply plugin: "androidx.navigation.safeargs.kotlin"
Run Code Online (Sandbox Code Playgroud)

或者这一行,如果你使用的是 java

apply plugin: "androidx.navigation.safeargs"
Run Code Online (Sandbox Code Playgroud)

  • 另外,不要忘记在项目级 `build.gradle` 文件中添加 `classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.0"` (7认同)

Chr*_*ian 35

我在使用 android studio 4.2 预览版时遇到了类似的问题。

问题是 IDE 不知何故没有选择插件放置生成的方向类的源文件夹。因此,将以下内容添加到我的应用程序 build.gradle 文件中为我解决了这个问题。

sourceSets {
    main {
        java {
            srcDirs += 'build/generated/source/navigation-args'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


小智 19

查找作为导航源的片段的类.如果定义从FragmentA到FragmentB的导航,您将找到FragmentADirections类,其中包含您在其中定义的操作(在nav_graph.xml中).

  • 此外,我必须重新同步我的项目才能使其显示。 (8认同)

Ale*_* B. 13

如果您已经添加了dependencies > classpathapply plugin,但不应用更改,一定要CleanBuilt为了改变该项目得到应用。

在 Android Studio 中:

  • Build tab > Clean project
  • Build tab > ReBuild project


Ram*_*mli 13

如果上述所有答案对您都不起作用,并且您仍然遇到未生成路线类的问题。确保您正在寻找正确的方向类

例如,我们必须从FragmentAto传递参数FragmentB
在导航图文件中,我们必须在 的<argument/>标签下添加FragmentB标签。这样,我们将得到两个生成的类FragmentBArgsFragmentADirections. 如您所见,用于创建方向类的FragmentA的名称,而不是FragmentB.

因此,请记住,与此问题的用户正在寻找的内容不同,生成的路线类将获得附加有“路线”一词的动作起始片段的类名称。不是目标片段的类名(参数的所有者)。

以下是文档中的内容

为动作起源的每个目的地创建一个类。 此类的名称是始发目的地的名称,并附加“方向”一词。

为接收目的地创建一个类。此类的名称是目的地的名称,附加“Args”一词。

此外,在 action 标签下添加参数标签不会生成路线类。它用于为目标片段的参数提供不同的默认值。

希望这可以帮助!


Fab*_*abi 13

我们可以通过在 gradle 中添加以下代码并重建应用程序来解决此问题。在项目gradle中添加以下代码。

classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
Run Code Online (Sandbox Code Playgroud)

在应用程序gradle中添加以下代码

apply plugin: "androidx.navigation.safeargs"
Run Code Online (Sandbox Code Playgroud)


Zde*_*ima 13

正如 Christian 所写,添加 source set do app gradle 文件有帮助。对我来说,这个问题出现在 Android Studio 4.1 和 4.2 中。在 Kotlin DSL 中:

android {
    ....
    sourceSets {
        getByName("main").java.srcDirs("build/generated/source/navigation-args")
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案解决了我在 Android Studio 4.2 上的问题 (2认同)

小智 7

对我来说,我意识到我还需要将相同的参数放入 navi_graph.xml 中的接收器片段中,以便生成 Arg 类(已经有方向)。例如:

<fragment android:id="@+id/receiver_fragment" ...>

    <argument android:name="arg_from_sender_fragment".../>

    <argument android:name="arg2_from_sender_fragment".../>

</fragment>
Run Code Online (Sandbox Code Playgroud)


Luf*_*ffy 6

应用程序->build.gradle:

在插件内部,我添加了以下行来解决该问题:

plugins {
    id "androidx.navigation.safeargs.kotlin"
}
Run Code Online (Sandbox Code Playgroud)


Yog*_*til 5

以下两个步骤对我有用:

  1. 清洁项目。
  2. 重建项目

安卓工作室 4.0 Kotlin 1.3.72


小智 5

所有解决方案都不适合我,我已将所有解决方案同步到 build.gradle 中。我找到方向和参数的唯一方法是从 Android 更改为 Project。打开应用程序 -> 包 -> 构建 -> 生成 -> 源 -> 导航参数。您将获得片段方向和参数。下面是截图,希望对大家有用!

片段方向和参数

在此输入图像描述