问题一.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()
问题四: