Android 基于MessageList的订购用户列表-Kotlin&;安卓
我试图按照用户ID在MessageList数组中的显示顺序对用户对象列表进行排序。MessageList由用户聊天对象的ID组成(按时间排序-使用sortwith),然后以与消息列表相同的顺序将其作为用户列表发送到用户适配器。这样可以显示用户名、配置文件图像和其他详细信息。。。我从firebase了解到一个用户的datasnapshot按原样提供订单,因此需要再次订购 我尝试根据MessageList对用户数组列表进行排序,但它在id访问(要求我将其公开)方面存在问题,并且最终输出不再是用户列表。您将如何继续展示按时间戳排序的消息列表 用户数据类Android 基于MessageList的订购用户列表-Kotlin&;安卓,android,sorting,kotlin,firebase-realtime-database,Android,Sorting,Kotlin,Firebase Realtime Database,我试图按照用户ID在MessageList数组中的显示顺序对用户对象列表进行排序。MessageList由用户聊天对象的ID组成(按时间排序-使用sortwith),然后以与消息列表相同的顺序将其作为用户列表发送到用户适配器。这样可以显示用户名、配置文件图像和其他详细信息。。。我从firebase了解到一个用户的datasnapshot按原样提供订单,因此需要再次订购 我尝试根据MessageList对用户数组列表进行排序,但它在id访问(要求我将其公开)方面存在问题,并且最终输出不再是用户列表
class Users {
private var uid: String = ""}
class MessageList {
private var id: String = ""
private var chattimeStmp: Long = 0}
消息列表数据类
class Users {
private var uid: String = ""}
class MessageList {
private var id: String = ""
private var chattimeStmp: Long = 0}
基于消息列表创建用户列表的函数
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) {
}
}
)
}
private var userMsgAdapter:userMsgAdapter?=无效的
私人var缪斯:列表?=无效的
私有var用户SMSGLIST:列表?=无效的
私有var firebaseUser:firebaseUser?=无效的
lateinit var回收器\u视图\u msgList:RecyclerView
private fun retrieveMessageList()
{
mUsers=ArrayList()
val ref=FirebaseDatabase.getInstance().reference.child(“用户”)
ref.addValueEventListener(对象:ValueEventListener{
覆盖数据更改(p0:DataSnapshot){
(mUsers作为ArrayList).clear()
//基于时间戳的消息列表排序
usersMsgList?.sortedBy{it.getChattimeStmp()}
对于(p0.儿童中的数据快照){
val user=dataSnapshot.getValue(Users::class.java)
for(用户列表中的每个消息传递者!!){
if(eachMessageList.getId()
.equals(user!!.getUID())和&!firebaseUser?.uid.equals(
eachMessageList.getId()
)
) {
(mUsers作为ArrayList)。添加(用户)
}
}
}
//基于另一个创建地图和排序列表
val orderById=usersMsgList!!.withIndex().associate{it.value to it.index}
val mSortedUsers=(mUsers作为ArrayList).sortedBy{orderById[it.getUID()]}
userMsgAdapter=userMsgAdapter(context!!,mUsers作为ArrayList,true)
userMsgAdapter!!.notifyDataSetChanged()
回收器\u视图\u msgList.adapter=userMsgAdapter
}
已取消覆盖乐趣(p0:DatabaseError){
}
}
)
}
在这种情况下,最好的解决方案是不要根据用户对象在Messagelist中的显示顺序对其进行排序,而是直接调用Messagelist中每个对象的recycler视图,并在适配器中获取用户详细信息