android - 在 NavDirections 中找不到 safeargs 参数

标签 android kotlin android-navigation android-safe-args

我已经实现了一个在 nav_graph 中的 fragment 之间传递的参数,但是当我尝试在原始 fragment 中设置参数时,NavDirections 找不到该参数。

请注意,在尝试传递参数之前导航工作正常。

如果我做一个干净的项目,我会失去 NavDirections。如果我进行重建,我将输掉争论。

Gradle :应用

    //Navigation
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
    apply plugin: "androidx.navigation.safeargs.kotlin"

导航图.xml

    <fragment
        android:id="@+id/destination_home"
        android:name="com.android.joncb.flightlogbook.HomeFragment"
        android:label="@string/lblHome"
        tools:layout="@layout/fragment_home">
        <action
            android:id="@+id/action_home_to_fltHistory"
            app:destination="@id/destination_fltHistory" />
        <action
            android:id="@+id/action_home_to_stats"
            app:destination="@id/destination_statistics" />
        <action
            android:id="@+id/action_home_to_newFlight"
            app:destination="@id/destination_newFlight" />
        <action
            android:id="@+id/action_home_to_fltDetails"
            app:destination="@id/destination_fltDetails" />
        <argument
            android:name="fltData"
            app:argType="string" />
    </fragment>

在我的 Home Fragment 中我收到错误“Unresolved reference: fltData”

        card_nextFlight.setOnClickListener {
            val actionDetails = HomeFragmentDirections.actionHomeToFltDetails()
            actionDetails.fltData ( flightData.toString())

            Navigation.findNavController(it).navigate(actionDetails)
        }

flightData 是一个数据类

data class FlightDTO(
    var airlineName: String, var faCode: String, var fltNo: String, var aircraft: String,
    var depAP: String, var arrAP: String, var schedDep: String, var schedArr: String,
    var date: String, var leg: Int = 0, var actDep: String = "", var actArr: String = "" ){

...

    override fun toString(): String {

        return "$airlineName $faCode $fltNo $aircraft $depAP $schedDep $arrAP $schedDep $date"
    }
}

我想通过使类 Parcelable 理想地通过该类,但在我可以传递一个字符串之前,没有必要冒险沿着包裹线前进。

最佳答案

您的 XML 写错了,请这样想:我构造 XML 属性的方式是生成的代码在目标之间看起来和接收的方式有点...

所以基本上在您的 nav_graph.xml 中您应该更改为:

<fragment
    android:id="@+id/destination_home"
    android:name="com.android.joncb.flightlogbook.HomeFragment"
    android:label="@string/lblHome"
    tools:layout="@layout/fragment_home">
    <action
        android:id="@+id/action_home_to_fltHistory"
        app:destination="@id/destination_fltHistory" />
    <action
        android:id="@+id/action_home_to_stats"
        app:destination="@id/destination_statistics" />
    <action
        android:id="@+id/action_home_to_newFlight"
        app:destination="@id/destination_newFlight" />
    <action
        android:id="@+id/action_home_to_fltDetails"
        app:destination="@id/destination_fltDetails">
        <argument
            android:name="fltData"
            app:argType="string" />
    </action>
</fragment>

在你的目的地应该是这样的:

<fragment
    android:id="@+id/destination_fltDetails"
    android:name="com.android.joncb.flightlogbook.FlightDetailsFragment"
    android:label="@string/lblFlightDetails"
    tools:layout="@layout/fragment_flight_details">
    <argument
        android:name="fltData"
        app:argType="string" />
</fragment>

在您的航类详细信息 fragment 中,属性是通过以下方式接收的:

private val args: FlightDetailsFragmentArgs by navArgs()
println(args.fltData) // prints the navigation data

更新:

忘记在您的 Home fragment 中提及您的 OnClickListener,它看起来更像这样:

card_nextFlight.setOnClickListener {
    val actionDetails = HomeFragmentDirections.actionHomeToFltDetails(flightData.toString())

    Navigation.findNavController(it).navigate(actionDetails)
}

关于android - 在 NavDirections 中找不到 safeargs 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61492507/

相关文章:

android - “getActionId overrides nothing” 升级到导航版本 2.4.0-alpha02 后

java - 将文件上传到服务器,java.net.ProtocolException : cannot write request body after response has been read

android - 如果,带对话框的其他语句出错(下面是我的 Log cat 错误)

kotlin - Kotlin中具有扩展功能的伴侣对象?

java - 在 Android 中重新字符串化一个字符串

android - FragmentContainerView 使用 findNavController

android - 在android中合并两个位图

android - 删除自动建议及其布局

javafx - 如何在 GSON 中反序列化 Kotlin 代表

android - 如果您在一个 Activity 中,按下 Activity 主页按钮时会调用哪些生命周期方法?