Я пытаюсь реализовать довольно простую логику в моем адаптере для повторного просмотра, но notifyDataSetChanged()
вызывает у меня головную боль.
У меня есть метод фильтра, который выглядит следующим образом:
fun filter(category: Int) {
Thread(Runnable {
activeFiltered!!.clear()
if (category == -1) {
filterAll()
} else {
filterCategory(category)
}
(mContext as Activity).runOnUiThread {
notifyDataSetChanged()
}
}).start()
}
, где функции filterAll()
и filterCategory()
довольно просты:
private fun filterAll() {
activeFiltered?.addAll(tempList!!)
}
private fun filterCategory(category: Int) {
for (sub in tempList!!) {
if (sub.category == category) {
activeFiltered?.add(sub)
}
}
}
Когда я запускаю этот код и фильтрую список по категориям, список activeFiltered корректно обновляется и содержит ожидаемые элементы, но при запуске notifyDataSetChanged()
он только сокращает диапазон списка без обновления элементов.
Есть ли способ это исправить?
Я также попытался вместо notifyDataSetChanged () использовать:
activeFiltered!!.forEachIndexed {index, _ -> notifyItemChanged(index)}
но проблема все еще существует.
Это также не проблема с потоками, так как я пытался поместить всю логику в основной поток, и список все еще не обновлялся правильно.
Это мой onBindViewHolder()
:
override fun onBindViewHolder(viewHolder: ActiveViewHolder, pos: Int) {
sub = activeFiltered!![pos]
inflateView()
}
Здесь я раздуваю свой текст, sub - это переменная экземпляра, установленная в onBindViewHolder()
:
private fun inflateView() {
viewHolder.title.text = sub.title
}