android - 在 RecyclerView 中单击项目后,不确定在哪里实现 parcelable ArrayList

标签 android kotlin arraylist parcelable

我想传递一些要在新 Activity AboutApp.kt 中查看的所选项目的信息,但在这里我只测试一个信息(名称)。我对 RecyclerView 没有任何问题,它可以工作。我见过很多方法来做可打包的 ArrayList 对象,但感觉混淆了要在哪里实现 Activity ,所以在 MainActivity 和 AboutApp (目标 Intent )中出现错误。

件码 MainActivity.kt 当我使用 时,showSelectedHerbal 出现错误位置 放额外的

class MainActivity : AppCompatActivity() {
    private lateinit var rvHerbal: RecyclerView
    private var list: ArrayList<Herbal> = arrayListOf()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        rvHerbal = findViewById(R.id.rv_herbal)
        rvHerbal.setHasFixedSize(true)

        list.addAll(HerbalData.listData)
        showRecyclerList()
    }

    private fun showRecyclerList() {
        rvHerbal.layoutManager = LinearLayoutManager(this)
        val listHerbalAdapter = ListHerbalAdapter(list)
        rvHerbal.adapter = listHerbalAdapter

        listHerbalAdapter.setOnItemClickCallback(object : ListHerbalAdapter.OnItemClickCallback {
            override fun onItemClicked(data: Herbal) {
                showSelectedHerbal(data)
            }
        })
    }

    ........

    private fun showSelectedHerbal(data: Herbal) {
        val moveIntent = Intent(this, AboutApp::class.java)
        moveIntent.putExtra("Example_Item", list!![position])
        this.startActivity(moveIntent)
    }

    .......
}

来自 的件码关于App.kt 在herbalName() 中出现错误。我知道我没有实现 parcelable 所以这是错误的
        val intent = intent
        val herbalData: HerbalData = intent.getParcelableExtra("Example_Item")

        val title: String = herbalData.herbalName()

        val itemName = findViewById<TextView>(R.id.item_name)
        itemName.text = title

很抱歉,我附上了一些我混淆的 Activity ,其中一个 Activity 是实现 Parcelable 的正确地方。这是我的数据类草药.kt
data class Herbal(
    var name: String = "",
    var detail: String = "",
    var photo: Int = 0
)

元素的 fragment 代码 HerbalData.kt
object HerbalData {
    private val herbalName = arrayOf("Cengkeh",
        "Ginseng",
        "Jahe")

    ..........

    val listData: ArrayList<Herbal>
        get() {
            val list = arrayListOf<Herbal>()
            for (position in herbalName.indices) {
                val herbal = Herbal()
                herbal.name = herbalName[position]
                herbal.detail = herbalDetail[position]
                herbal.photo = herbalImage[position]
                list.add(herbal)
            }
            return list
        }
}

请帮助我在哪里编写可打包的 ArrayList 以及如何修复它。提前感谢您的帮助。

最佳答案

首先,您的 AboutApp.kt 中的错误是因为您有 herbalName在您的 HerbalData 对象中是私有(private)的。删除 private 修饰符以在那里访问它。

只需在您的数据类上添加@Parcelize 注释即可自动生成writeToParcelcreateFromParcel方法给你!

@Parcelize
data class Herbal(...) : Parcelable

在你的 build.gradle 文件中添加这个:
androidExtensions {
    features = ["parcelize"]
}

PS:引用:https://medium.com/@BladeCoder/a-study-of-the-parcelize-feature-from-kotlin-android-extensions-59a5adcd5909

关于android - 在 RecyclerView 中单击项目后,不确定在哪里实现 parcelable ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61421173/

相关文章:

java - 为什么即使我没有更改或设置任何值,全局列表也会受到影响?

android - 从android中动态创建的textview获取值(value)

android - 是否可以在 Android 应用程序中捕获/接收 IR 信号?

firebase - 获取 firebase/firestore SERVERTIME 并转换为日期(月和日)

dictionary - 在函数中从 Hashmap 正确返回 Int

java - 创建包含不同类型对象的哈希集

java - 在ArrayList中查找多个具有相似值的元素?

android - 如何解决自定义 Lint 规则中context.report的重载分辨率歧义?

java - MediaPlayer 无内容提供程序错误 : W/MediaPlayer: Couldn't open https://youtu. be/oEgpGv2CF1U : java. io.FileNotFoundException:无内容提供程序:

kotlin - 如何在 Kotlin 中同时捕获多个异常?