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
我有一个用户对象的列表视图实现(在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