Как обновить один элемент в PagedListAdapter - PullRequest
0 голосов
/ 29 декабря 2018

Я реализовал новый PagedListAdapter с ItemKeyedDataSource.Мой список содержит элементы ленты с кнопкой «Мне нравится».Нажатие на кнопку «Нравится» должно обновить элемент.

Чтобы обновить мой элемент списка одним нажатием кнопки, я обновляю состояние в моем фоновом режиме Firestore и вызываю invalidate на моем ItemKeyedDataSource.Но это освежит весь мой список, когда я вернусь к началу моего списка.

Я не был уверен, нормальное ли это поведение, поэтому я пошел отлаживать и проверять maiby, мой DiffUtil.ItemCallback был проблемой.Но эти два метода (areItemsTheSame и areContentsTheSame) никогда не вызываются.

Итак, вызывает ли вызов invalidate в DataSource способ инициировать обновление одного элемента?И поможет ли DiffUtil отслеживать мою позицию в списке после обновления или я смотрю в неправильном направлении?

1 Ответ

0 голосов
/ 29 декабря 2018

После некоторых копаний я нашел следующее решение:

Чтобы обновить отдельный элемент

Вы можете вызвать notifyItemChanged на адаптере.Это вызовет обновление из источника данных и обновит элемент списка.

adapter.notifyItemChanged(selectedItemPosition)

Чтобы обновить все данные

Вы можете вызвать недействительным на DataSource

feedDataSourceFactory.feedLiveData.value!!.invalidate()
...