【发布时间】:2020-10-19 23:30:54
【问题描述】:
每当发送新消息时,我都希望更新回收站视图。日志以正确的顺序显示 uid,但视图并未反映这一点。我确实看到某处提到移动单个项目。我已经尝试过了,但无法让它正常工作。移动单个项目绝对是首选。我移动了recycler_view_chatlist.adapter = userAdapter 位以查看是否可行,但无济于事。我也有userAdapter!!.notifyDataSetChanged(),结果也一样。我尝试在我的 UserAdapter 中创建一个函数并从我的片段中调用它。我很茫然……
edit* 我在片段中添加了一些代码。
这是我的一些 ChatsFragment:
//edit
@RequiresApi(Build.VERSION_CODES.O)
private fun addMsg() {
if (sortedMsg?.size!! >= 2) {
sortedMsg?.union(sortedMsg!!)
}
sortMsg(sortedMsg)
getUid()
Log.d("ARRAY AFTER SORT", sortMsg(sortedMsg).toString())
}
@RequiresApi(Build.VERSION_CODES.O)
fun sortMsg(sortedMsg: List<String>?): List<String>? {
Log.d("LAST ID", lastId)
val dateTimeStrToLocalDateTime: (String) -> LocalDateTime = {
LocalDateTime.parse(
it.substring(0, 26),
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSSSSS")
)
}
val finalSort = sortedMsg?.sortedByDescending(dateTimeStrToLocalDateTime)
return finalSort
}
//end edit
@RequiresApi(Build.VERSION_CODES.O)
private fun getUid() {
val userArray = ArrayList<String>()
val firebaseUser = FirebaseAuth.getInstance().currentUser
val reference = FirebaseDatabase.getInstance().reference.child("Chats")
reference.addListenerForSingleValueEvent(object : ValueEventListener {
@RequiresApi(Build.VERSION_CODES.O)
override fun onDataChange(p0: DataSnapshot) {
for (item in sortMsg(sortedMsg)!!) {
val stringVal = p0.child(item).getValue(Chat::class.java)
Log.d("SET UID item", item)
if (stringVal != null) {
if (stringVal.getReceiver() != firebaseUser!!.uid) {
userArray.add(stringVal.getReceiver()!!)
}
if (stringVal.getSender() != firebaseUser.uid) {
userArray.add(stringVal.getSender()!!)
}
}
}
Log.d("USER ARRAY", userArray.toString())
setUid(userArray)
}
override fun onCancelled(p0: DatabaseError) {
}
})
}
private fun setUid(userArray: ArrayList<String>) {
val latestMsgId = FirebaseDatabase.getInstance().reference.child("Users")
latestMsgId.addValueEventListener(object : ValueEventListener {
@RequiresApi(Build.VERSION_CODES.O)
override fun onDataChange(p0: DataSnapshot) {
if (!executed) {
val user = p0.child(firebaseUser!!.uid).getValue(Users::class.java)
latestMsgId.child(firebaseUser!!.uid).child("lastMsg").setValue(userArray)
val sortedUsers = user?.getLastMsg()
Log.d("SORTED USERS", sortedUsers.toString())
for (item in sortedUsers!!) {
val uidVal = p0.child(item).getValue(Users::class.java)
uidArray.add(uidVal!!)
Log.d("UID VAL", uidVal.getUserName().toString())
executed = true
}
}
userAdapter = UserAdapter(p0, context!!, uidArray, true)
recycler_view_chatlist.adapter = userAdapter
}
override fun onCancelled(p0: DatabaseError) {
}
})
}
这是用户适配器:
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
val view: View = LayoutInflater.from(mContext).inflate(
R.layout.user_search_item_layout,
viewGroup,
false
)
return ViewHolder(view)
}
@RequiresApi(Build.VERSION_CODES.O)
override fun onBindViewHolder(holder: ViewHolder, i: Int) {
val user: Users = mUsers[i]
val userVisitId: String? = user.getUID()
val firebaseUser = FirebaseAuth.getInstance().currentUser
//use data from mUsers...
这是 Logcat:
2020-10-19 19:22:08.632 11190-11190/com.score.scorev2 W/ClassMapper: No setter/field for 2020-10-19 02:51:50:192000-MJylHpCC_Lf5aKy70vv found on class com.score.scorev2.ModelClasses.Chat
2020-10-19 19:22:08.633 11190-11190/com.score.scorev2 W/ClassMapper: No setter/field for 2020-10-19 03:37:43:137000-MJyvmw6URelqbe6Po-O found on class com.score.scorev2.ModelClasses.Chat
2020-10-19 19:22:08.633 11190-11190/com.score.scorev2 W/ClassMapper: No setter/field for 2020-10-19 03:32:45:371000-MJyueEPOCBKEV_gVI6z found on class com.score.scorev2.ModelClasses.Chat
2020-10-19 19:22:08.633 11190-11190/com.score.scorev2 W/ClassMapper: No setter/field for 2020-10-19 22:46:25:902000-MK21hTuH3sRADWn9HQz found on class com.score.scorev2.ModelClasses.Chat
2020-10-19 19:22:08.633 11190-11190/com.score.scorev2 W/ClassMapper: No setter/field for 2020-10-19 02:29:00:370000-MJyg3OZIxJtBRq1ZrKM found on class com.score.scorev2.ModelClasses.Chat
2020-10-19 19:22:08.633 11190-11190/com.score.scorev2 D/ARRAY BEFORE SORT: [2020-10-19 23:18:58:435000-MK299AVpBCKcPx_NdR0, 2020-10-19 23:18:50:285000-MK297B92yt4GeyYe8hn]
2020-10-19 19:22:08.640 11190-11190/com.score.scorev2 D/LAST ID: 2020-10-19 23:18:50:285000-MK297B92yt4GeyYe8hn
2020-10-19 19:22:08.658 11190-11190/com.score.scorev2 D/LAST ID: 2020-10-19 23:18:50:285000-MK297B92yt4GeyYe8hn
2020-10-19 19:22:08.658 11190-11190/com.score.scorev2 D/ARRAY AFTER SORT: [2020-10-19 23:18:58:435000-MK299AVpBCKcPx_NdR0, 2020-10-19 23:18:50:285000-MK297B92yt4GeyYe8hn]
2020-10-19 19:22:08.660 11190-11190/com.score.scorev2 D/SET UID item: 2020-10-19 23:18:58:435000-MK299AVpBCKcPx_NdR0
2020-10-19 19:22:08.660 11190-11190/com.score.scorev2 D/SET UID item: 2020-10-19 23:18:50:285000-MK297B92yt4GeyYe8hn
2020-10-19 19:22:08.660 11190-11190/com.score.scorev2 D/USER ARRAY: [5l5iy4Tg0zfp7DyqMtvBphEsmnh1, KQ78XVs7ezRRcduEU6gUHUrCj7i1]
2020-10-19 19:22:08.662 11190-11190/com.score.scorev2 D/SET UID item: 2020-10-19 23:18:58:435000-MK299AVpBCKcPx_NdR0
2020-10-19 19:22:08.663 11190-11190/com.score.scorev2 D/SET UID item: 2020-10-19 23:18:50:285000-MK297B92yt4GeyYe8hn
2020-10-19 19:22:08.663 11190-11190/com.score.scorev2 D/USER ARRAY: [5l5iy4Tg0zfp7DyqMtvBphEsmnh1, KQ78XVs7ezRRcduEU6gUHUrCj7i1]
2020-10-19 19:22:08.664 11190-11190/com.score.scorev2 D/SORTED USERS: [5l5iy4Tg0zfp7DyqMtvBphEsmnh1, KQ78XVs7ezRRcduEU6gUHUrCj7i1]
2020-10-19 19:22:08.664 11190-11190/com.score.scorev2 D/UID VAL: Jerry
2020-10-19 19:22:08.664 11190-11190/com.score.scorev2 D/UID VAL: Ethan
【问题讨论】:
标签: android kotlin firebase-realtime-database android-recyclerview