如何解决我目前正在聊天应用程序中实现分页3.0库
class ChatAdapter(private val message: List<ChatMessage>) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object {
const val VIEW_TYPE_1 = 1
const val VIEW_TYPE_2 = 2
}
private inner class View1ViewHolder(itemView: View) :
RecyclerView.ViewHolder(itemView) {
val textMessage: TextView = itemView.textMessage
val messageTimestamp: TextView = itemView.messageTimestamp
val imageMessage: ImageView = itemView.imageMessage
val imageCover: ImageView = itemView.imageCover
val deliveredReceipt: ImageView = itemView.delivered_image
fun bind(position: Int) {
setIsRecyclable(false)
val item = message[position]
val itemPrev = if (position !== 0) {
message[position - 1]
} else message[position]
if(item.status){
deliveredReceipt.visibility = View.VISIBLE
}
if (item.url == "") {
textMessage.text = item.text
if (convertDurationToFormatted(
itemPrev.timestamp * 1000,item.timestamp * 1000
) || itemPrev == message[position]
) {
messageTimestamp.visibility = View.VISIBLE
messageTimestamp.text = getDateTime(item.timestamp)
} else {
messageTimestamp.visibility = View.GONE
}
} else if (item.url !== "") {
textMessage.visibility = View.GONE
messageTimestamp.visibility = View.GONE
Picasso.get().load(item.url).into(imageMessage)
imageCover.visibility = View.VISIBLE
imageMessage.visibility = View.VISIBLE
imageMessage.setonClickListener {
val options = arrayOf<CharSequence>(
"View Image","Cancel"
)
val builder: AlertDialog.Builder = AlertDialog.Builder(itemView.context)
builder.setTitle("what Now?")
builder.setItems(options) { _,which ->
if (which == 0) {
val intent = Intent(builder.context,ViewFullImageActivity::class.java)
intent.putExtra("url",item.url)
builder.context.startActivity(intent)
}
}
builder.show()
}
}
}
}
private inner class View2ViewHolder(itemView: View) :
RecyclerView.ViewHolder(itemView) {
val textMessage: TextView = itemView.textMessage
val messageTimestamp: TextView = itemView.messageTimestamp
val imageMessage: ImageView = itemView.imageMessage
val imageCover: ImageView = itemView.imageCover
fun bind(position: Int) {
setIsRecyclable(false)
val item = message[position]
val itemPrev = if (position !== 0) {
message[position - 1]
} else message[position]
if (item.url == "") {
textMessage.text = item.text
if (convertDurationToFormatted(
itemPrev.timestamp * 1000,item.timestamp * 1000
) || itemPrev == message[position]
) {
messageTimestamp.visibility = View.VISIBLE
messageTimestamp.text = getDateTime(item.timestamp)
}
} else if (item.url !== "") {
textMessage.visibility = View.GONE
messageTimestamp.visibility = View.GONE
Picasso.get().load(item.url).into(imageMessage)
imageCover.visibility = View.VISIBLE
imageMessage.visibility = View.VISIBLE
imageMessage.setonClickListener {
val options = arrayOf<CharSequence>(
"View Image",item.url)
builder.context.startActivity(intent)
}
}
builder.show()
}
}
}
}
override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): RecyclerView.ViewHolder {
if (viewType == VIEW_TYPE_1) {
return View1ViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.chat_row_to,parent,false)
)
}
return View2ViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.chat_row_from,false)
)
}
override fun getItemCount(): Int = message.size
private fun getDateTime(s: Long): String? {
return try {
val sdf = SimpleDateFormat("EEE,hh:mmaa",Locale.getDefault())
val netDate = Date(s * 1000)
sdf.format(netDate)
} catch (e: Exception) {
e.toString()
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder,position: Int) {
if (message[position].fromId == Firebase.auth.uid) {
(holder as View1ViewHolder).bind(position)
} else {
(holder as View2ViewHolder).bind(position)
}
}
override fun getItemViewType(position: Int): Int {
return if (message[position].fromId == Firebase.auth.uid) {
VIEW_TYPE_1
} else {
VIEW_TYPE_2
}
}
}
现在我必须转到分页数据适配器。 如何像在上面的适配器中一样使用多种视图类型?
在示例适配器下方附加扩展的页面数据适配器
class UserAdapter(diffCallback: DiffUtil.ItemCallback<User>) :
PagingDataAdapter<User,UserViewHolder>(diffCallback) {
override fun onCreateViewHolder(
parent: ViewGroup,viewType: Int
): UserViewHolder {
return UserViewHolder(parent)
}
override fun onBindViewHolder(holder: UserViewHolder,position: Int) {
val item = getItem(position)
// Note that item may be null. ViewHolder must support binding a
// null item as a placeholder.
holder.bind(item)
}
}
从上面可以清楚地看出,我在用户发送和接收消息时使用了不同的视图持有者。在分页数据适配器中可以做类似的事情吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。