我已经实现了一个在 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/