Ваш код выглядит нормально, но кажется, что элемент, который вы пытаетесь удалить из списка, там не найден.
adapterList.remove(classElement)
При удалении элемента из списка с помощью remove(o: Object): Boolean
первый соответствующий элемент из списка будет удален.Соответствующий элемент - это элемент, в котором метод equals
возвращает true
.
listElement == elementToRemove // Kotlin
listElement.equals(elementToRemove); // Java
По умолчанию (это означает, что если вы не переопределите equals
), объекты будут равны, только если они совместно используютто же место в памяти.В вашем примере элемент в списке находится в другом месте, чем элемент, который вы создаете из Firestore в вашем слушателе изменения документа.
Решение зависит от вашего FireClassModel
.Глядя на несколько FireClassModel
объектов, как бы вы решили, какие из них равны?Может быть, они будут иметь одинаковый идентификатор?Затем переопределите метод equals
(и для каждого контракта также hashCode
) и сравните поля, которые делают два объекта идентичными.Для идентификатора решение может выглядеть так (генерируется Android Studio):
class FireClassModel(val id: Int) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as FireClassModel
if (id != other.id) return false
return true
}
override fun hashCode(): Int {
return id
}
}
После этого сравнение двух FireClassModel
объектов с одинаковым идентификатором вернет true
.Без переопределения метода equals
это было бы не так (если вы не сравниваете объект с самим собой).
Подробнее о equals
можно найти в Stackoverflow и в Java документация .