Я использую LiveData и ViewModel из компонентов архитектуры в моем приложении.
У меня есть список элементов, разбитых на страницы, я загружаю больше, когда пользователь прокручивает страницу вниз. Результат запроса сохраняется в
MutableLiveData<List<SearchResult>>
Когда я выполняю начальную загрузку и устанавливаю переменную в новый список, он запускает обратный вызов адаптера привязки, который загружает данные в recyclerview.
Однако, когда я загружаю вторую страницу и добавляю в список дополнительные элементы, обратный вызов не запускается. Однако, если я заменю список новым списком, содержащим как старые, так и новые элементы, сработает обратный вызов.
Возможно ли, чтобы 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, вам необходимо использовать { {X0}} или setValue
, чтобы вызвать наблюдателей.
Похожие вопросы
Связанные вопросы
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .