問題一.RecyclerView中嵌套另外一個RecyclerView時,內部的RecyclerView滑動時狀態是不會變化的。
原因:
解決方案:獲取父級的RecyclerView進行判斷。
問題二:發現onCreateViewHolder頻繁被調用,從而導致卡頓。
原因:頁面刷新較爲頻繁。 所以每次notifyDataSetChanged提示刷新的時候,會回收掉所有已經展示的ViewHolder,然後重新渲染,RecyclerView默認的緩存數量是5個。這時候,如果當前展示的數量超過5個,比如8個。那麼就會有3個ViewHolder找到可複用的對象,從而走onCreateViewHolder的流程,初始化View的操作是十分耗時的,而且是主線程,從而導致卡頓。
解決方案:如果刷新確實比較頻繁的話,則按照當前頁面估算能展示多少個ViewHolder,擴大複用的數值,比如我就把ViewHolder的複用數量改爲了10。
itemView.rv_list.recycledViewPool.setMaxRecycledViews(0, 10)
問題三:java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder
原因:滑動的過程中,如果依賴的list的數量發生變化,則就會拋出這樣的錯誤。
解決方案:
1.確保adapter依賴獨立的數據源。這個意思就是說adapter獨佔一個recycleList,而進行操作的是另外一個dataList。當需要刷新時,在主線程中,清空recycleList,把數據源dataList加到recycleList中。並且立即調用notifyDataSetChanged進行刷新。
示例如下:
functionItemAdapter?.recyclerList?.clear()
functionItemAdapter?.recyclerList?.addAll(mDataList)
functionItemAdapter?.notifyDataSetChanged()
問題四: