У меня проблемы с настройкой данных ViewModel для создаваемого мной интерфейса чата. У меня есть широкий спектр различных типов данных, которые я хочу показать в макете чата (RecyclerView). Они включают:
Text, Buttons, Card view carousel ...
Я установил класс Sealed, который, я надеюсь, сможет содержать все классы данных, необходимые для отображения этих данных, которые выглядят так:
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?