我正在开发聊天应用程序,但遇到问题。如果有人可以提供帮助,我想在一组消息(例如 WhatsApp)上显示日期和时间。例如我们有这个:
我的消息 RecyclerView 适配器是这样的:
class SingleChatAdapter(private var context: Context, messageList: ArrayList<SingleChatData>?, senderRoom: String,
receiverRoom: String, private val incDecNum: (Boolean) -> Unit,
private val showChosenToolbar: (Boolean, Boolean) -> Unit):
RecyclerView.Adapter<ViewHolder?>() {
private var selectedShared = IsSelectedShared(context)
private val sentNum = 1
private val receivedNum = 2
private val senderRoom: String
private val receiverRoom: String
private lateinit var messages: ArrayList<SingleChatData>
private val itemsData: ArrayList<SelectedItemsData>?= null
// Voice Player
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return if (viewType == sentNum){
val view = LayoutInflater.from(parent.context).inflate(R.layout.sent_message_content, parent, false)
SentMsgViewHolder(view)
} else {
val view = LayoutInflater.from(parent.context).inflate(R.layout.received_message_content, parent, false)
ReceivedMsgViewHolder(view)
}
}
override fun getItemCount(): Int {
return messages.size
}
override fun getItemViewType(position: Int): Int {
val newMsg = messages[position]
return if (FirebaseAuth.getInstance().uid == newMsg.senderId){
sentNum
} else {
receivedNum
}
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
//
}
inner class SentMsgViewHolder(itemView: View): ViewHolder(itemView){
var binding = SentMessageContentBinding.bind(itemView)
private var onItemClick: ((data: SingleChatData, weakImage: WeakReference<ImageView>) -> Unit)?= null
var data: SingleChatData?= null
init {
onItemClick.let { onItemClick ->
data?.let { data->
if (onItemClick != null) {
onItemClick(data, WeakReference(binding.sentImg))
}
}
}
}
}
inner class ReceivedMsgViewHolder(itemView: View): ViewHolder(itemView){
var binding = ReceivedMessageContentBinding.bind(itemView)
private var onItemClick: ((data: SingleChatData, weakImage: WeakReference<ImageView>) -> Unit)?= null
var data: SingleChatData?= null
init {
onItemClick.let { onItemClick ->
data?.let { data->
if (onItemClick != null) {
onItemClick(data, WeakReference(binding.receivedImg))
}
}
}
}
}
init {
if (messageList != null){
this.messages = messageList
}
this.senderRoom = senderRoom
this.receiverRoom = receiverRoom
}
}
我尝试了太多次寻找解决方案,但找不到正确的方法。 如果有人可以帮忙,谢谢。
您的数组中已经有两种项目类型。添加第三个项目类型 - DateMarker。浏览消息列表并在适当的地方插入日期标记。然后您可以将其显示为普通视图类型,并以您想要的任何方式定义其视图。