1. 程式人生 > >android RecyclerView 頻繁設定資料閃退問題

android RecyclerView 頻繁設定資料閃退問題

最近專案中一個播放的列表,有上下切換功能。測試頻繁切換更換重新整理資料時,報出以下錯誤:
java.lang.IllegalArgumentException
Scrapped or attached views may not be recycled. isScrap:false isAttached:true

這個錯誤查了下,網上沒有看到大神給出很給力的解答,stackoverflow上資料多一些,也是沒怎麼看明白。而且發生的情況還不一樣。

大概的問題就是頻繁切換資料。我專案裡在重新整理的時候,會呼叫adapter.clear();清楚資料後再設定上去。而這個設定過程是說直接從一個空view突然到滿屏的一個數據填充過程發生了錯誤。但是英文直譯過來明顯是說view有可能不被回收問題,不知道兩者存在什麼聯絡

這個問題沒明白為什麼會出現,因為切換資料來源時,慢慢切換,不會出現這種問題。測試那手速我不想描述。

後來問了一哥們,說遇到同樣的問題。解決了,然後我特意去找讓他私下問了問,也沒給我解釋原因,說讓我去看原始碼。不知道原因去看原始碼,這種情況就進入了懵逼狀態。

他給出的解決辦法如下:

我程式中原來的重新整理邏輯是,adapter.clear() 然後adapter.addAll(list); 完事了,正常情況下確實也沒問題。然後那哥們就說加上adapter.notifyDataSetChanged();這句試試。沒其他轍加上了,讓測試隨便手速去切換資料,嗯,解決了。雖然不知道為什麼。。。。(不是一個純技術 人啊,沒搞懂原因其實)。

正常adapter.addAll(list)這句其實新增資料,是有重新整理機制的,進去看了下原始碼不是整個列表notify的。所以猜測是不是更換所有資料,是要科學的去notify一次?

所以這個錯誤,在加上

adapter.notifyDataSetChanged()

這句後,我這是沒問題了。如果有朋友也遇到這個問題,實在找不出辦法,加上這句試試。

如果有大神遇到這個問題,並且知道具體原因,以及科學的有理有據的解決辦法,希望分享出來讓大家能沾沾光

要是有冠希哥的外文水平+撩妹水平多好啊,以上~~~