如何从 recyclerView 适配器访问密封 class 的内部数据 classes
How to access inner data classes of sealed class from a recyclerView adapter
我在为正在构建的聊天界面设置 ViewModel 数据时遇到问题,我有大量不同类型的数据要在聊天布局 (RecyclerView) 中显示。这些包括:
文本、按钮、卡片视图轮播...
我已经设置了一个密封的 class,我希望它能够包含显示此数据所需的所有数据 classes,它看起来像这样 atm:
sealed class ChatMessage {
abstract var msgTime: Long?
sealed class Text : ChatMessage() {
abstract val originator: String
abstract var content: String
data class Mine(
override val originator: String,
override var msgTime: Long?,
override var content: String
) : Text()
data class Agent(
override val originator: String,
override var msgTime: Long?,
override var content: String
) : Text()
}
sealed class Button : ChatMessage(){
abstract val title: String
abstract val actionText: String
data class General (
override var title: String,
override var actionText: String,
override var msgTime: Long?
) : Button()
}
}
在我的适配器中,我将它添加到 arrayList 中以供显示:
var itemsOld: ArrayList<ChatMessage> = ArrayList()
添加新项目如下:
fun addNewMessage(model: ChatMessage.Text.Mine){
itemsOld.add(model)
itemsOld.sortBy { it.msgTime }
// mRecyclerView!!.smoothScrollToPosition(itemCount - 1)
MyApplication.appContext!!.runOnUiThread {
// Stuff that updates the UI
notifyDataSetChanged()
}
}
但是我无法访问
itemsOld[0].content
或
itemsOld[0].originator
仅
itemsOld[0].msgTime
我如何构造数据 classes 以便我有一个父级 class 可以由 ArrayList 实现并且可以保存我可能需要显示的所有数据 classes同时在 RecyclerView 中?
None 这些字段在 ChatMessage 模型中可用。您需要将类型转换为特定数据 class 或使用 when() 表达式来为您进行转换。希望这对您有所帮助,干杯!
我在为正在构建的聊天界面设置 ViewModel 数据时遇到问题,我有大量不同类型的数据要在聊天布局 (RecyclerView) 中显示。这些包括: 文本、按钮、卡片视图轮播...
我已经设置了一个密封的 class,我希望它能够包含显示此数据所需的所有数据 classes,它看起来像这样 atm:
sealed class ChatMessage {
abstract var msgTime: Long?
sealed class Text : ChatMessage() {
abstract val originator: String
abstract var content: String
data class Mine(
override val originator: String,
override var msgTime: Long?,
override var content: String
) : Text()
data class Agent(
override val originator: String,
override var msgTime: Long?,
override var content: String
) : Text()
}
sealed class Button : ChatMessage(){
abstract val title: String
abstract val actionText: String
data class General (
override var title: String,
override var actionText: String,
override var msgTime: Long?
) : Button()
}
}
在我的适配器中,我将它添加到 arrayList 中以供显示:
var itemsOld: ArrayList<ChatMessage> = ArrayList()
添加新项目如下:
fun addNewMessage(model: ChatMessage.Text.Mine){
itemsOld.add(model)
itemsOld.sortBy { it.msgTime }
// mRecyclerView!!.smoothScrollToPosition(itemCount - 1)
MyApplication.appContext!!.runOnUiThread {
// Stuff that updates the UI
notifyDataSetChanged()
}
}
但是我无法访问
itemsOld[0].content
或
itemsOld[0].originator
仅
itemsOld[0].msgTime
我如何构造数据 classes 以便我有一个父级 class 可以由 ArrayList 实现并且可以保存我可能需要显示的所有数据 classes同时在 RecyclerView 中?
None 这些字段在 ChatMessage 模型中可用。您需要将类型转换为特定数据 class 或使用 when() 表达式来为您进行转换。希望这对您有所帮助,干杯!