Kotlin 中的 Parcelable 实现?

Parcelable implementation in Kotlin?

我有一个用户对象的列表视图实现(在HomeActivity.kt),显示来自 ArrayList 的用户的特定数据。 我的 setOnItemClickListener 工作正常,并在选择任何项目时将用户带到另一个 activity(DetailsActivity.kt) 。我想传递所选用户的所有信息以将其显示在DetailsActicity.kt中。我如何在 KOTLIN 中实现 Parcelable 来做到这一点?

这是我的HomeActivity.kt

val sectors = arrayOf("Sector", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
        val sectorOption = findViewById<View>(R.id.sectorOption) as Spinner

        if(sectorOption != null){
            val sectorAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, sectors)
            sectorOption.adapter = sectorAdapter
            sectorOption.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
                override fun onItemSelected(
                    parent: AdapterView<*>?,
                    view: View?,
                    position: Int,
                    id: Long
                ) {
                    if (parent != null) {
                        sect = parent.getItemAtPosition(position).toString()
                        db.collection("Users").whereEqualTo("sector", sect)
                            .get()
                            .addOnCompleteListener { task ->
                                if(task.isSuccessful){
                                    UserList.clear()
                                    for(document in task.result!!){
                                        Log.d(ContentValues.TAG, "test" + document.id + "=>" + document.data)

                                        UserList.add(User(document.get("Name").toString(), document.get("EmailID").toString(), document.get("sector").toString()))
                                    }
                                    UserDataAdapter = UserDataAdapter(ArrayList(UserList), applicationContext)
                                    listview.setAdapter(UserDataAdapter)
                                }
                            }
                    }
                }
                override fun onNothingSelected(parent: AdapterView<*>?) {

                }
            }
        }        

        listview.setOnItemClickListener{parent, view, position, id ->
            val element = UserDataAdapter?.getItem(position)
            val intent = Intent(this, OrderActivity::class.java)
            startActivity(intent)
        }

这是我的User.kt数据class

data class User(val Name: String = "",
                 val sector: String = "",
                 val Address: String = "",
                 val Mobile: String = "",
                 val EmailID: String = ""
)

一种方法是使用 Android Kotlin extensions plugin 中的 @Parcelable 注释。

它节省了您编写样板代码的时间,并提供了一种通过实施 Parceler 个实例来自定义 serialization/deserialization 的方法。

此外,您仍然可以选择使用 Kotlin 以正常方式实现 Parcelable 接口:https://developer.android.com/reference/kotlin/android/os/Parcelable