Обновление 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
для того, чтобы вызвать наблюдателей.