0

我使用帶有網格視圖的回收站視圖(每個項目包含一個網格)和縮略圖圖像在視圖中添加圖像後開始上傳,我需要更改一些值(狀態)在模型中開始和完成上傳。 什麼我目前做的是變化值模型,並呼籲notifyDataSetChanged,但它會導致慢下來的應用程序(掛起一些時間),因爲它的更新列表中的所有子:( 任何一個可以幫我這個?如何刷新適配器中的數據,而無需調用notifyDataSetChanged

+0

所有的值都改變了,或者只有一些值? – hehe

+0

@gj一次一個項目的值從網格改變。 – Ankit

+0

還有其他方法,如notifydatarangeinserted。,notifyItemChanged(int position,Object payload)檢查文檔http://developer.android.com/intl/es/reference/android/support/v7/widget/RecyclerView.Adapter.html/ – Raghunandan

回答

0

呼叫notifydatasetchanged()僅用於特定的GridView適配器。切勿notifydatasetchanged()爲完整的recyclerview適配器調用。

0

嘗試重新設定它的適配器。

gridview.setAdapter(適配器) -passing新list to your adapter。

+0

@nikhil比它不會讓我向下滾動,保持設置適配器。 – Ankit

1

我相信notifyDataSetChanged更新所有的值,無論他們是否有變化,這就是爲什麼它很慢。我建議你嘗試使用notifyItemChanged(int position)

根據recyclerview docs這是notifyDataSetChanged做:

此事件不會指定有關數據集發生了什麼變化,迫使任何觀察家認爲所有現有項目和結構可能不再有效。 LayoutManagers將被迫完全重新綁定並重新佈局所有可見的視圖。

+0

我已經使用了notifyItemChanged(int position),但是如果我在一個網格中使用了超過10張圖片,它會在1秒內調用notifyItemChanged 10次,所以問題保持不變。 – Ankit

+0

嗯,如何使用rxandroid的觀測值?我還沒有嘗試過,但我認爲這值得一試。會發生什麼是,你會同時調用'notifyItemChanged'。 – hehe

0

老問題,但類似於我正在經歷的。 更改列表詳細信息時,RecyclerView通常非常快速。但是,如果你不在乎,操縱很多圖像可能會讓它變慢。

我建議您嘗試刪除圖像並重復它,以便您可以看到是否如此緩慢。我懷疑這會快很多。

如果是這樣,請確保您正在處理UI線程中的圖像。 Android文檔建議您使用Glide等庫來處理圖像的二次採樣,以確保其尺寸合適。

希望有幫助!

相關問題