列表(RecyclerView)Item使用空布局的坑

這兩天在實現一個列表功能,列表的樣式是類似微信公眾號消息列表,數據分類顯示,實現的邏輯也比較簡單,只要將數據處理成List<List<XxxBean>>的形式即可,每個Item對應的layout布局是一個空的LinearLayout,然后使用該LinearLayout動態添加子控件(根據List<XxxBean>數據添加內容視圖,子控件長度即為List的長度)。帶著滿心歡喜打開了app,效果不錯,是自己想要的效果。

當前數據長度為1,圖示為一個Item的布局,但是當我下拉刷新(SwipieRefreshLayout)列表時,異常現象出現了。接口返回的數據長度依舊為1,通過notifyDataSetChanged()刷新適配器內容,這時界面上出現了兩條數據!!!

心想,這是什么鬼!!,當時瞬間蒙蔽,查了好久找不到原因,以為是數據問題,查了好幾次,發現數據很正常。后來看到網上的文章說RecyclerView有緩存機制,清了緩存再試試?還是不行,這時已經花了我很長時間了,滿頭焦慮啊~~~

沒辦法,只能繼續一行代碼一行代碼找原因了,看到適配器時時,我突然感覺找到問題所在了,因為RecyclerView的Item的布局是一個LinearLayout,RecyclerView有強大的視圖重用機制,當我調用notifyDataSetChanged時,原先Item的LinearLayout并未重新創建,而是引用了之前的LinearLayout,由于之前LinearLayout已經添加過子控件,并未清除,所以導致重復添加子控件的問題,于是在適配器里添加了一行代碼——>(linearLayout.removeAllViews();)。重新運行,再也不會有重復顯示的問題,果然是這個原因!

其實是個很簡單的問題,吃一塹長一智,遇到問題是好事,以后不會再犯錯。

希望對遇到相同問題的網友有所幫助!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容