Обновление MutableLiveData списка элементов

Я использую LiveData и ViewModel из компонентов архитектуры в моем приложении.

У меня есть список элементов, которые разбиты на страницы, я загружаю больше, когда пользователь прокручивает страницу вниз. Результат запроса сохраняется в

MutableLiveData<List<SearchResult>>

Когда я делаю начальную загрузку и устанавливаю переменную в новый список, он вызывает обратный вызов на адаптере привязки, который загружает данные в представление recycler.

Однако когда я загружаю вторую страницу и добавляю дополнительные элементы в список, обратный вызов не запускается. Однако, если я заменю список новым списком, содержащим как старые, так и новые элементы, обратный вызов сработает.

Возможно ли, чтобы LiveData уведомляла своих наблюдателей при обновлении списка поддержки, а не только при обновлении объекта LiveData?

Это не работает (игнорируя нулевые проверки):

val results = MutableLiveData<MutableList<SearchResult>>()

/* later */

results.value.addAll(newResults)

Это работает:

val results = MutableLiveData<MutableList<SearchResult>>()

/* later */

val list = mutableListOf<SearchResult>()
list.addAll(results.value)
list.addAll(newResults)
results.value = list

2 ответа

Я думаю, что расширение немного приятнее.

operator fun <T> MutableLiveData<ArrayList<T>>.plusAssign(values: List<T>) {
    val value = this.value ?: arrayListOf()
    value.addAll(values)
    this.value = value
}

Использование:

list += anotherList;

Согласно MutableLiveData, вам нужно использовать postValue или же setValue для того, чтобы вызвать наблюдателей.

Другие вопросы по тегам