簡體   English   中英

如何在不調用notifyDataSetChanged的情況下刷新適配器中的數據

[英]How to refresh data in adapter without calling notifyDataSetChanged

在將圖像添加到視圖中開始上傳后,我將回收器視圖與帶有縮略圖的網格視圖(每個項目都包含一個網格)一起使用,並且在開始和結束上傳時我需要更改模型中的某些值(狀態)。 我目前正在做的是更改模型中的值並調用notifyDataSetChanged,但這會導致應用程序運行緩慢(掛起幾次),因為它會更新list的每個子級:(有人可以幫我嗎?

僅針對特定的Gridview適配器調用notifydatasetchanged()。 不要為完整的recyclerview適配器調用notifydatasetchanged()。

嘗試再次將其設置為適配器。

gridview.setAdapter(您的適配器)-將新列表傳遞到適配器。

我相信notifyDataSetChanged更新所有值,而不管它們是否有更改,這就是為什么它很慢。 我建議您嘗試使用notifyItemChanged(int position)代替。

根據recyclerview文檔,這是notifyDataSetChanged所做的:

此事件未指定數據集已更改的內容,從而迫使所有觀察者假定所有現有項目和結構可能不再有效。 LayoutManager將被迫完全重新綁定並重新布局所有可見視圖。

老問題,但與我所遇到的類似。 更改列表詳細信息時,RecyclerView通常非常快。 但是,如果您不小心,處理大量圖像確實會降低速度。

我建議您嘗試刪除這些圖像並重復進行操作,以便查看是否同樣慢。 我懷疑這會快很多。

如果是這樣,請確保您正在處理UI線程之外的圖像。 Android文檔建議您使用諸如Glide之類的庫,該庫還可以對圖像進行二次采樣以確保其大小正確。

希望有幫助!

暫無
暫無

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

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