簡體   English   中英

如何在不刷新recyclerview的情況下替換適配器數據列表

[英]How to replace adapter list of data without refreshing the recyclerview

我的片段中有recyclerView,我想更改recyclerView適配器中的數據列表而不刷新recyclerView我正在使用這兩個函數

mAdapter.clearList() mAdapter.addItems(newList)

但是由於 clearList() function 有一個快速刷新,任何人都有更好的 function 使用

fun addItems(items: List<T>) {
        val myList = adapterItems()
        var count = myList.size
        // Remove loading indicator dummy item
        if (count > 0 && hasMore()) {
            count--
            myList.removeAt(count)
            notifyItemRemoved(count)
        }
        // Insert extra data
        myList.addAll(items)
        notifyItemRangeInserted(count, items.size)
    } 

 fun clearList() {
        val myList = adapterItems()
        val count = myList.size
        myList.clear()
        notifyItemRangeRemoved(0, count)
    }

您可以制作一個setItems function 在使用notifyDataSetChanged()通知RecyclerView之前清除然后添加 - 我不確定這是否重要,我覺得在您獲得布局傳遞和屏幕更新之前應該全部解決。 您可以看到的故障感覺就像發生了一件事,然后又發生了另一件事-我不確定這一切在內部是如何處理的,如果這些事情是否排隊。 值得一試!

您可以嘗試的另一件事是在 clearList( notifyDataSetChanged() clearList()而不是notifyItemRangeRemoved 由於您要丟棄所有內容,因此僅使用“一切都已更改”通知調用更有意義。 我不確定使用rangeRemoved調用后跟rangeInserted調用是否會導致問題 - 它不應該,但取決於它的解決方式,可能會有一些怪癖。

要檢查的另一件事是,您肯定只更新了一次適配器 - 如果導致該更新的任何原因在短時間內觸發兩次,您可能會看到它出現故障

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM