我正在尝试使用 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)
}
...
}
期待会员申报
看起来您正在尝试使用类似于 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
}
}