我在为正在构建的聊天界面设置 ViewModel 数据时遇到问题,我想在聊天布局 (RecyclerView) 中显示各种不同类型的数据。其中包括:文本、按钮、卡片视图轮播...
我已经设置了一个 Sealed 类,我希望它能够包含显示这些数据所需的所有数据类,它看起来像这样的 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
我如何构造数据类,以便我有一个可以由 ArrayList 实现的父类,并且可以保存我可能需要同时在 RecyclerView 中显示的所有数据类?