Когда я отправляю новый список в свой ListAdapter, RecyclerView не обновляется обновленными данными

Я разрабатываю простое приложение, в котором люди могут добавлять товары в корзину (во фрагменте продуктов), а затем изменять количество товаров в корзине (во фрагменте корзины). Я использую RecyclerView с ListAdapter для обоих фрагментов. Я использую обертку экземпляра LiveData вокруг корзины, чтобы я мог наблюдать за любыми изменениями во фрагменте. Когда я изменяю количество, фрагмент уведомляется, и когда это происходит, я использую метод submitList() ListAdapter для обновления только измененных данных в recyclerview. Однако метод DiffUtil areContentsTheSame() всегда возвращает true, поэтому элементы RecyclerView не обновляются до тех пор, пока я не вернусь к предыдущему фрагменту и не вернусь в корзину или не прокрутлю список.

ViewModel

private val _basket = MutableLiveData<Basket>()

val basket: LiveData<Basket>
    get() = _basket


fun onIncrementBasketProductQuantityButtonPressed(product: Product) {
    val newProduct = product.copy(quantity = product.quantity.plus(1))
    val newList= ArrayList(_basket.value!!.basket)

    val newBasket = _basket.value!!.copy(basket = newList)
    newBasket.updateProductInBasket(newProduct, newProduct.quantity)

    _basket.value = newBasket
}
Basket

data class Basket(@Json(name = "basket") val basket: MutableList<Product> = arrayListOf()): Serializable {

    fun updateProductInBasket(product: Product, quantity: Int) {
        val p = findProduct(product)

        if (p != null) {
            p.quantity = quantity
            p.setSubTotal()
        } else {
            addNewProductToBasket(product, quantity)
        }
    }

    private fun addNewProductToBasket(product: Product, quantity: Int) {
        product.quantity = quantity
        product.setSubTotal()

        this.basket.add(product)
    }

    private fun findProduct(product: Product) : Product? {
        return this.basket.find { it.name == product.name && it.size == product.size }
    }

}

person Pritam Sangani    schedule 28.06.2019    source источник
comment
Позвоните adapter.notifyDataSetChanged() после изменения данных   -  person HB.    schedule 28.06.2019
comment
Я не хочу использовать notifyDataSetChanged(), так как это блокирует поток пользовательского интерфейса и обновляет весь список, поэтому анимация отсутствует. Я хочу использовать submitList(), но у меня проблемы с получением ListAdapter новых LiveData перед submitList(), поэтому он не знает, какой элемент изменился.   -  person Pritam Sangani    schedule 28.06.2019
comment
Тогда взгляните на этот вопрос - stackoverflow.com/q/49726385/5550161   -  person HB.    schedule 28.06.2019
comment
Вы знаете, что вы также можете использовать adapter.notifyItemChanged(position), это только обновит конкретный элемент.   -  person HB.    schedule 28.06.2019
comment
Такая же проблема, но с LiveData. Когда я добавляю напрямую, это работает.   -  person TheRealChx101    schedule 17.09.2019
comment
@ TheRealChx101 эй, что ты имеешь в виду, говоря напрямую?   -  person Guy    schedule 01.11.2019
comment
@Парень. Я даже не помню, в чем была проблема. Я давно исправил. Извини.   -  person TheRealChx101    schedule 02.11.2019