Помогите дополнить или исправить код в адаптере для отображения разных типов представлений в одном RecyclerView
class Chats: RecyclerView.Adapter<Chats.ViewHolder>() {
private var chatsList = emptyList<ChatsModel>()
val SENDER_VIEW_TYPE = 1
val RECEIVER_VIEW_TYPE = 2
lateinit var currentUser: String
lateinit var database: DatabaseReference
class ViewHolder(view: View): RecyclerView.ViewHolder(view)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
if(viewType == SENDER_VIEW_TYPE) {
val sender = LayoutInflater.from(parent.context).inflate(R.layout.sender, parent, false)
return ViewHolder(sender)
}else {
val receiver = LayoutInflater.from(parent.context).inflate(R.layout.receiver, parent, false)
return ViewHolder(receiver)
}
}
override fun getItemViewType(position: Int): Int {
val user = chatsList[position]
if(user.userId.equals(FirebaseAuth.getInstance().currentUser?.uid)) {
return SENDER_VIEW_TYPE
}else (
return RECEIVER_VIEW_TYPE
)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val chat = chatsList[position]
database = Firebase.database.getReference("Messages")
currentUser = FirebaseAuth.getInstance().currentUser?.uid!!
val receiverId = chat.receiverId
when(holder.itemViewType){
SENDER_VIEW_TYPE -> {
holder.itemView.senderText.text = chat.message
val date = Date(chat.time)
val simpleDateFormat = SimpleDateFormat("HH.mm")
val strDate = simpleDateFormat.format(date)
holder.itemView.senderTime.text = strDate.toString()
}
RECEIVER_VIEW_TYPE -> {holder.itemView.recieveText.text = chat.message}
}
holder.itemView.setOnLongClickListener(View.OnLongClickListener {
val bottomSheetDialog = BottomSheetDialog(it.context)
bottomSheetDialog.setContentView(R.layout.bottom_sheet_chats)
bottomSheetDialog.setCancelable(true)
bottomSheetDialog.setCanceledOnTouchOutside(true)
bottomSheetDialog.show()
val delete = bottomSheetDialog.delete
delete.setOnClickListener {
val materialAlertDialogBuilder = MaterialAlertDialogBuilder(it.context)
materialAlertDialogBuilder.setTitle("Удалить")
materialAlertDialogBuilder.setPositiveButton("Да") { materialAlertDialogBuilder, which ->
val senderRoom = currentUser + " + " + receiverId
database.child(senderRoom).child(chat.key).removeValue().addOnSuccessListener {
holder.itemView.senderText.text = "Сообщение удалено"
}
}
materialAlertDialogBuilder.setNegativeButton("Нет") {materialAlertDialogBuilder, which ->
materialAlertDialogBuilder.dismiss()
}
materialAlertDialogBuilder.show()
}
true
})
}
override fun getItemCount(): Int {
return chatsList.size
}
@SuppressLint("NotifyDataSetChanged")
fun setList(list: List<ChatsModel>) {
chatsList = list
notifyDataSetChanged()
}
}
Источник: Stack Overflow на русском