I have this in app gradle:

apply plugin: 'androidx.navigation.safeargs'

implementation 'android.arch.navigation:navigation-fragment-ktx:1.0.0'
implementation 'android.arch.navigation:navigation-ui-ktx:1.0.0'

在gradle项目中:

classpath 'android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0'

the navigation graph:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/navigation_graph"
    app:startDestination="@id/loginPhoneNumberFragment">

    <fragment
        android:id="@+id/loginPhoneNumberFragment"
        android:name="...fragments.LoginPhoneNumberFragment"
        android:label="@string/login_activity_title"
        tools:layout="@layout/fragment_login_phone_number">
        <action
            android:id="@+id/action_loginPhoneNumberFragment_to_loginCodeFragment"
            app:destination="@id/loginCodeFragment">
            <argument
                android:name="prefix"
                app:argType="string" />
            <argument
                android:name="phone_number"
                app:argType="string" />
        </action>
    </fragment>

    <fragment
        android:id="@+id/loginCodeFragment"
        android:name="...LoginCodeFragment"
        android:label="@string/login_activity_title"
        tools:layout="@layout/fragment_login_code" />

</navigation>

LoginPhoneNumberFragment:

val action = LoginPhoneNumberFragmentDirections.actionLoginPhoneNumberFragmentToLoginCodeFragment(prefix, phoneNumber)
view?.findNavController()?.navigate(action)

LoginCodeFragment:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val prefix = LoginCodeFragmentArgs.fromBundle(arguments).prefix //LoginCodeFragmentArgs is not recognized

    }

在LoginPhoneNumberFragment中,它创建了"LoginPhoneNumberFragmentDirections"类,但是在目标类LoginCodeFragment上,它不识别"LoginCodeFragmentArgs".

有人能告诉我我错过了什么吗? (我清理和重建了缓存,并try 了无效缓存.)

推荐答案

Ok, so after a lot of searching I found out my mistake - the arguments should be on the Destination fragment, and not on the starting one:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/navigation_graph"
    app:startDestination="@id/loginPhoneNumberFragment">

    <fragment
        android:id="@+id/loginPhoneNumberFragment"
        android:name="...fragments.LoginPhoneNumberFragment"
        android:label="@string/login_activity_title"
        tools:layout="@layout/fragment_login_phone_number">
        <action
            android:id="@+id/action_loginPhoneNumberFragment_to_loginCodeFragment"
            app:destination="@id/loginCodeFragment">
        </action>
    </fragment>

    <fragment
        android:id="@+id/loginCodeFragment"
        android:name="...fragments.LoginCodeFragment"
        android:label="@string/login_activity_title"
        tools:layout="@layout/fragment_login_code" >
        <argument
            android:name="prefix"
            app:argType="string"
            android:defaultValue="888" />
        <argument
            android:name="phone_number"
            app:argType="string"
            android:defaultValue="88888888"/>
    </fragment>

</navigation>

您也可以通过导航图设计手动添加它-按目标片断,然后按参数部分的"+",它会将其添加到文本文件中.

Kotlin相关问答推荐

插入/更新/upsert时不发出房间流

如何让Gradle8+在编译Kotlin代码之前编译Groovy代码?然后把它们混合在一个项目中?

无法访问类kotlin.coroutines.CoroutineContext';.判断模块类路径中是否存在丢失或冲突的依赖项

KTOR';S函数`staticResources`在Kotlin本机目标上不可用

捕捉异常是Kotlin协程中的反模式吗?

垂直滚动条下拉菜单的桌面组合

kotlin 模式匹配如何像 scala 一样工作

为什么这两个 Kotlin 协程函数不一样?

mutableStateOf 和 mutableStateListOf 有什么区别?

通用接口继承

如何处理基于枚举提前返回的 forEach 循环,Kotlin 中的一条路径除外

顶级属性的初始化

Android 在将 androidx 生物识别更新为 1.0.0-alpha04 后崩溃

Kotlin 中多个 init 块的用例?

无法从 XML 访问 NavHostFragment

使用最新的 com.jakewharton.rxbinding3:rxbinding:3.0.0-alpha2 库时未找到 RxTextView 和其他小部件

Mocked suspend函数在Mockito中返回null

Android Studio - java.io.IOException:无法生成 v1 签名

目前不支持 Gradle 项目的自动库版本更新.请手动更新您的 build.gradle

如何在 firebase 数据库中使用 kotlin 协程