android - 基于 MessageList 排序用户列表 - Kotlin & Android
问题描述
我正在尝试按用户 ID 在 MessageList 数组中出现的顺序对用户对象列表进行排序。MessageList 包含用户正在与之聊天的人的 ID(按时间排序 - 使用 sortwith),然后按照与消息列表相同的顺序将其作为用户列表发送到用户适配器。这样可以显示用户名、个人资料图片和其他详细信息……我从 firebase 了解到用户的数据快照按原样提供,因此需要再次订购……
我试图根据 MessageList 对用户数组列表进行排序,但它在 id 访问方面存在问题(要求我将其公开)并且最终输出不再是用户列表。您将如何继续展示按时间戳排序的 MessageList?
用户数据类
class Users {
private var uid: String = ""}
消息列表数据类
class MessageList {
private var id: String = ""
private var chattimeStmp: Long = 0}
基于 MessagesList 创建用户列表的函数
private var userMsgAdapter: UserMsgAdapter? = null
private var mUsers: List<Users>? = null
private var usersMsgList: List<MessageList>? = null
private var firebaseUser : FirebaseUser? = null
lateinit var recycler_view_msgList : RecyclerView
private fun retrieveMessageList()
{
mUsers = ArrayList()
val ref = FirebaseDatabase.getInstance().reference.child("Users")
ref.addValueEventListener(object : ValueEventListener {
override fun onDataChange(p0: DataSnapshot) {
(mUsers as ArrayList).clear()
//sorting MessageList based on timestamp
usersMsgList?.sortedBy { it.getChattimeStmp() }
for (dataSnapshot in p0.children) {
val user = dataSnapshot.getValue(Users::class.java)
for (eachMessageList in usersMsgList!!) {
if (eachMessageList.getId()
.equals(user!!.getUID()) && !firebaseUser?.uid.equals(
eachMessageList.getId()
)
) {
(mUsers as ArrayList).add(user)
}
}
}
//Creating a map and sorting list based on the other
val orderById = usersMsgList!!.withIndex().associate { it.value to it.index }
val mSortedUsers = (mUsers as ArrayList<Users>).sortedBy { orderById[it.getUID()] }
userMsgAdapter = UserMsgAdapter(context!!, mUsers as ArrayList<Users>, true)
userMsgAdapter!!.notifyDataSetChanged()
recycler_view_msgList.adapter = userMsgAdapter
}
override fun onCancelled(p0: DatabaseError) {
}
}
)
}
解决方案
在这种情况下,最好的解决方案是不根据用户对象在消息列表中出现的顺序对用户对象进行排序,而是直接为消息列表中的每个对象调用回收器视图,并在适配器中获取用户详细信息。
推荐阅读
- arrays - 如何对输出进行排序,每个 ip 地址在 PowerShell 中都有最大值?
- git - 如何重置:Maven、GitFlow 和 GitLab
- sql-server - 在不提供输出参数的情况下调用 proc
- spring-boot - 将请求重定向到 Kubernetes 中的特定副本
- docker - openwrtorg/rootfs:19.07.4 实际上是如何构建的?
- python - .format() 转换成 python 字典
- ios - jsoup--jsoup如何采集动态数据和下拉刷新的下拉分页
- php - PHP 范围(数字和字母)
- r - 如何在 R 中打开“.m”的数据集
- c# - 如何为 XmlDsigEnvelopedSignatureTransform 设置摘要和签名方法