У меня есть ресайклер Просмотр сообщений пользователя. Новое уведомление имеет цветной фон, а старое - белый. Моя база данных содержит информацию о каждом уведомлении, сообщающее, является ли оно новым (просто спойте 0 для нового и 1 для увиденного).
У меня сверху кнопка «Пометить все как прочитанное». При щелчке у меня есть прослушиватель уведомлений пользователя, и при каждом добавлении дочернего элемента значение этого дочернего элемента изменяется с 0 на 1.
Когда это будет сделано, я хотел бы заново заполнить recyclerView, чтобы все уведомления имели надлежащий фон (белый - для старых уведомлений).
У меня есть отдельная функция, которая также прослушивает уведомления с помощью дочернего прослушивателя событий, и я вызываю эту функцию для каждого дочернего элемента, добавленного к предыдущей функции.
Теперь результат этого ДОЛЖЕН БЫТЬ тем, что я описал - для каждого добавленного дочернего элемента вызывается прослушиватель уведомлений, а затем он загружает все уведомления, поэтому, если я получу в итоге квадрат с количеством действительных уведомлений. Причина, по которой я запутался, заключается в том, что я очищаю адаптер каждый раз, когда вызывается функция прослушивания уведомлений, так что, насколько я понимаю, должен оставаться только последний раз, когда вызывается функция, потому что все предыдущие вызовы были очищены, но это не так.
Буду признателен за понимание того, почему это происходит. Спасибо!
notifications_mark_all_as_read.setOnClickListener {
refFeedNotifications.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(p0: DataSnapshot) {
for (i in p0.children) {
val notificationsRef =
FirebaseDatabase.getInstance()
.getReference("/users/$uid/notifications/gallery/${i.key}/seen")
notificationsRef.setValue(1)
notificationsRecyclerAdapter.clear()
listenToNotifications()
}
}
override fun onCancelled(p0: DatabaseError) {}
})
}
private fun listenToNotifications() {
notificationsRecyclerAdapter.clear()
refFeedNotifications.addChildEventListener(object : ChildEventListener {
override fun onChildAdded(p0: DataSnapshot, p1: String?) {
val notification = p0.getValue(Notification::class.java)
if (notification != null) {
notificationsRecyclerAdapter.add(SingleFeedNotification(notification, activity as MainActivity))
}
}
override fun onCancelled(p0: DatabaseError) {
}
override fun onChildMoved(p0: DataSnapshot, p1: String?) {
}
override fun onChildChanged(p0: DataSnapshot, p1: String?) {
}
override fun onChildRemoved(p0: DataSnapshot) {
}
})
}