天天看點

RecyclerView的notifyDataSetChanged

  相信RecycleView很多人都不陌生,每次拿到資料後,都會調用Adapter的notifyDataSetChanged實作UI更新,但事實上notifyDataSetChanged使用的時候也是存在些問題的,就像小哥遇到的一個問題:利用notifyDataSetChanged(position)實作局部更新資料,但是就好像出現了UI更新延時的問題,查了一些文檔,https://blog.csdn.net/lyankj/article/details/53738398,發現這位小哥也遇到這樣的問題,也給出了解決方法,利用notifyDataSetChanged(position,payload),将payload參數設定為0傳入就可以避免UI更新出現延時。

  但問題來了,這是為什麼?payload起到了什麼作用?https://www.jianshu.com/p/de8601f357a9這位小哥講得就很不錯,當我們調用notifyDataSetChanged(position)的時候,其實adapter會去調用onCreateViewHolder和onBindViewHolder的,而調用notifyDataSetChanged(position,payload)的時候,adapter隻會調用onBindViewHolder的,是以我們看到,後者避免了視圖的重新建立,提高渲染效率,同時還可以通過判斷onBindViewHolder傳過來的payLoad,來單獨更新某些UI,真正實作局部重新整理。看來後面還是要多花時間看看RecyclerView呀