web-dev-qa-db-ja.com

DiffUtilsは新しいアイテムを表示しません

DiffUtils.dispatchUpdatesTo(adapter)recyclerViewの配列のサイズを更新していません

私のresultのサイズは現在のitemListよりも大きいですが、現在のサイズしか表示されません

配列のサイズの変化をDiffUtilsで表示するにはどうすればよいですか? notifyDatasetChanged()の使用は正しくないと思います。

これが私が今アダプターでこれを行う方法です:

    fun update(items: List<ITEM>) {
    updateAdapterWithDiffResult(calculateDiff(items))
}

private fun updateAdapterWithDiffResult(result: DiffUtil.DiffResult) {
    result.dispatchUpdatesTo(this)
}

private fun calculateDiff(newItems: List<ITEM>) =
        DiffUtil.calculateDiff(DiffUtilCallback(itemList, newItems))
9
Toper

itemListに新しいアイテムを追加していないため、リストサイズは更新されていません。

このようにコードを更新します-

class YourAdapter(
    private val itemList: MutableList<ITEM>
) : RecyclerView.Adapter<YourAdapter.ViewHolder>() {

.
.
.

    fun updateList(newList: MutableList<ITEM>) {
        val diffResult = DiffUtil.calculateDiff(
                DiffUtilCallback(this.itemList, newList))

        itemList.clear()
        itemList.addAll(newList)

        diffResult.dispatchUpdatesTo(this)
    }
}

それがあなたのために働くことを願っています。

12
D_Alpha