android - 将对象作为参数从 Activity 传递到 fragment 的问题

标签 android android-fragments android-activity kotlin

我正在尝试将对象作为参数从 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/

相关文章:

android - 将 expandableListView 示例变成 fragment

android - 提交后 fragment 未附加到 Activity

android - ViewPager + TabLayout 中跳过页面

android - Android onActivityForResult 如何在 foregrnd 和 bckgrnd 之间切换应用程序?

android - 为什么 Eclipse 不理解 Build.VERSION_CODES.KITKAT?

iphone - 在不知道号码的情况下通过本地 Wifi 向 Iphone/Blackberry/Android 发送消息

android - 从不扩展 Activity 的类开始服务

java - 如何从非 Activity 类开始一个 Activity 并等到它完成?

android - 如何在向 android 中的多个联系人发送短信时获取特定联系人号码的送达报告?

android - 如何使用 AJAX 上传原始图像?