Android - 添加新项目到 MutableLiveData 并观察

Android - Add new Items to MutableLiveData and observe

如何将新项目添加到 MutableLiveData 列表?我想构建一个无限滚动的 Recyclerview。所以我有一个包含 10 个项目的列表,在单击 "load more button" 之后我想添加十个新项目。

这是我的产品列表:

private companion object {
        private var _products = MutableLiveData<MutableList<Product>>()
    }

    val products: LiveData<MutableList<Product>> = _products

Ant 这是我的加载函数:

fun loadProducts(category: Category) { // category: String
        _isViewLoading.postValue(true)


        AppService.fetchProducts(category, neuheitenCounter) { success, response ->
            _isViewLoading.postValue(false)
            if(success) {
                when(category) {
                    Category.NEWS -> {
                        if(_products.value == null) {
                            _products.value = response?.products //as List<Product>
                        } else {
                            response?.let {
                                _products.value?.addAll(response?.products)
                            }
                        }

                        neuheitenCounter++
                    }
                }
            }
        }
    }

如果我调用 _products.value = response?.products,它会触发我的 Activity 中的观察方法。但是,如果我调用 addAlladd,则不会调用观察者方法。

实际上,这就是您应该如何更新适配器

  1. 向现有列表添加新项目
  2. 通过将相同的列表分配给它的值来通知 LiveData。 Here同题同解
  3. 当您的 Activity 收到列表已更改的通知时,它应该通过调用其 notifyDataSetChanged() 方法将更改通知适配器。

当您调用适配器的 notifyDataSetChanged() 方法时,它会将以前的项目与新项目进行比较,找出其中哪些项目已更改并更新 RecyclerView。您可以通过调用 notifyItemRangeInserted() 而不是 notifyDataSetChanged() 来帮助适配器。 notifyItemRangeInserted() 接受插入项目的范围,在您的情况下,您可以计算它,但要计算 adapter.itemCountproductList.size 之间的差异。

我有同样的问题。我在新的 List 中复制了 LiveData 的数据,然后我将 new data 添加到 new List。并将 new List 分配给LiveData。我知道这不是确切的解决方案,但这个解决了问题。

试试这个。

    var tempList= _products.value
    tempList.addAll(response?.products)
    _products.value = tempList

希望对您有所帮助。

MutableLiveData.postValue(T value)