我正在尝试将对象作为参数从 Activity 传递到 fragment 。
我已经翻山越岭寻找如何做到这一点,我尝试了很多方法,但没有一个奏效。
这是我尝试过的:
// In my Activity, where I call my fragment
var bundle = Bundle()
bundle.putParcelable("restaurant", restaurant)
var fragment = Home2Fragment()
fragment.arguments = bundle
supportFragmentManager.beginTransaction().replace(R.id.content, fragment, FRAGMENT_HOME).commit()
我的 IDE (Android Studio) 在 bundle.putParcelable 行中用下划线“restaurant”,告诉我类型不匹配。 这与 getArguments() 方法相同,我得到类型不匹配。
我的类(class)是这样的:
@Parcel
class Establishment {
var title = ""
// More variables
fun loadFromJson(json: JsonObject) {
title = readString(json, TAG_TITLE)
// More API loads
}
companion object {
private const val TAG_TITLE = "title"
// More tags
}
}
我不明白为什么我的类被设置为“Parcel”但不被识别为“Parcelable”。
我正在寻找一种将参数从 Activity 传递到 fragment 的有效方法。
非常感谢。
编辑:
根据要求,我尝试将其设为可序列化。 我无法使其可序列化,因为“可序列化”不存在。
但是我试着让它成为“SerializedName”,但是“这个注解不适用于目标‘class’”
最佳答案
您的类应该以这种方式实现 Parcelable:
class Establishment(val title: String) : Parcelable {
private constructor(p: Parcel) : this(
title = p.readString(),
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeString(title)
}
override fun describeContents() = 0
companion object {
@JvmField val CREATOR = object : Parcelable.Creator<Establishment> {
override fun createFromParcel(parcel: Parcel) = Establishment(parcel)
override fun newArray(size: Int) = arrayOfNulls<Establishment>(size)
}
}
fun loadFromJson(json: JsonObject) {
title = readString(json, TAG_TITLE)
// More API loads
}
}
关于android - 将对象作为参数从 Activity 传递到 fragment 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49132512/