MessageList를 기반으로 사용자 목록 주문하기-Kotlin 및 Android

Nov 16 2020

MessageList 배열에 사용자 ID가 나타나는 순서로 사용자 개체 목록을 정렬하려고합니다. MessageList는 사용자가 채팅하는 사람의 ID (시간순-sortwith 사용)로 구성되며, 메시지 목록과 동일한 순서로 사용자 목록으로 사용자 어댑터에 전송됩니다. 이것은 사용자 이름, 프로필 이미지 및 기타 세부 정보를 표시 할 수 있도록하기위한 것입니다. 저는 firebase에서 사용자의 데이터 스냅 샷이있는 그대로 제공되는 것을 배웠으므로 다시 주문해야합니다.

사용자 배열 목록 기준으로 MessageList를 정렬하려고 시도했지만 ID 액세스 (공개 요청)에 문제가 있으며 최종 출력이 더 이상 사용자 목록이 아닙니다. 타임 스탬프 순서가 지정된 MessageList를 어떻게 표시 하시겠습니까?

사용자 데이터 클래스

class Users {
private var uid: String = ""}

MessageList 데이터 클래스

class MessageList {
private var id: String = ""
private var chattimeStmp: Long = 0}

MessagesList를 기반으로 User List를 생성하는 기능

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) {
            }
        }
        )
    }

답변

madhall Nov 18 2020 at 11:31

이 경우 가장 좋은 해결책은 메시지 목록에 나타나는 순서에 따라 사용자 개체를 정렬하지 않고 MessageList의 각 개체에 대해 리사이클 러보기를 직접 호출하고 어댑터에서 사용자 세부 정보를 가져 오는 것입니다.