Не обновляется RecyclerView после вызова notifyDataSetChanged()
Есть обработчик EditText
private fun filterEdit(editText: EditText, map: MutableMap<String, Chat>){
editText.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
val newMap = list.filter{ it.key.contains(s,true) }
adapter?.updateList(newMap)
Log.i("Edit","${newMap} ${adapter?.itemCount}")
}
override fun afterTextChanged(s: Editable?) {}
})
}
При старте (может это играет какую-то роль) список имеет всего 1 элемент, как только я ввожу в EditText строку которую не пропускает фильтр. newMap выводит в логе что список пустой, замет я передаю его в адаптер
fun updateList(newMap: Map<String, Chat>){
map = newMap
setUserId = map.keys
notifyDataSetChanged()
}
map в адаптере - это список от которого зависит длина списка и что в нем будет, и в логе EditText он возвращает 0, но список все равно не обновляется, что не так??
Ответы (1 шт):
Автор решения: ЮрийСПб
→ Ссылка
Тут дело в ссылках на разные экземпляры контейнера с данными (подробное объяснение) Простым фиксом будет замена значения по ссылке на изменение уже имеющегося значения:
Вместо:
map = newMap
напишите:
map.clear()
map.putAll(newMap)