RecyclerView 类中的两个内部类以显示不同的布局

问题描述 投票:0回答:1

我正在尝试使用 Kotlin 在 RecyclerView 类中声明两个内部类。目前,当我像下面这样尝试时,我在两个类上都收到一条错误消息。我需要更改什么才能在 Kotlin 上运行这项工作?

    class ChatAdapter(private val dataSet: ArrayList<ChatMessage>, private val receiverProfilImage: Bitmap,val senderId:String) :
    RecyclerView.Adapter<RecyclerView.ViewHolder>() {


     class SentMessageViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
     {
         lateinit var binding: ItemContainerSentMessageBinding

         SentMessageViewHolder(itemContainerSentMessageBinding: ItemContainerSentMessageBinding)  {
             binding = itemContainerSentMessageBinding
         }

         fun setData(chatMessage: ChatMessage)
         {
             binding.textMessage.text = chatMessage.message
             binding.textDateTime.text = chatMessage.dateTime
         }
     }


     class ReceivedMessageViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
     {
         lateinit var binding: ItemContainerReceivedMessageBinding

         ReceivedMessageViewHolder(itemContainerReceivedMessageBinding: ItemContainerReceivedMessageBinding) {
             binding = itemContainerReceivedMessageBinding
         }

         fun setData(chatMessage: ChatMessage,receiverProfilImage:Bitmap)
         {
             binding.textMessage.text = chatMessage.message
             binding.textDateTime.text = chatMessage.dateTime
             binding.imageProfil.setImageBitmap(receiverProfilImage)
         }

     ...
     }

期待会员申报

android android-studio kotlin android-recyclerview android-viewholder
1个回答
0
投票

看起来您正在尝试使用类似于 Java 构造函数语法的语法来声明这些类的辅助构造函数。

无论如何你都不需要辅助构造函数,因为你想要实例化其中一个的唯一方法是使用视图绑定。 (因此,您可以查看 Kotlin 文档以了解如何编写辅助构造函数。我不会在这里解释,因为在这种情况下您不需要它。)

没有理由对可以在构造期间初始化的属性使用

lateinit
。在这种情况下,它可以只是在主构造函数中声明的属性。绑定的根视图是您的 ViewHolder 的基础视图,因此您可以将
binding.root
传递给超类构造函数。

 class SentMessageViewHolder(val binding: ItemContainerSentMessageBinding) : RecyclerView.ViewHolder(binding.root)
 {
     fun setData(chatMessage: ChatMessage)
     {
         binding.textMessage.text = chatMessage.message
         binding.textDateTime.text = chatMessage.dateTime
     }
 }
© www.soinside.com 2019 - 2024. All rights reserved.