Помогите дополнить или исправить код в адаптере для отображения разных типов представлений в одном RecyclerView

Рейтинг: 0Ответов: 0Опубликовано: 17.04.2023
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()
    }


}

Ответы

Ответов пока нет.