我想传递一些要在新 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 注释即可自动生成writeToParcel
和 createFromParcel
方法给你!
@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/