Android中Holder复用问题

2017-05-03  本文已影响0人  每天坚持一点

1:android中常见的RecyclerView控件中 position1位置的条目View进度正在更新,但是滑动到position2位置条目的时候,由于view复用的问题,导致在position2使用了position1位置的View对象,其中的进度控件被复用--就是hashcode的地址值是一样的! 如何解决问题呢?


思路:

      第一步:Hashmap集合<position,holder>类型存储对应位置position的holder的引用值!用huadongPosition标记 当前滑动到什么位置,用currentDrawPosition标记当前正在绘制的位置!

      第二步:在进度的更新的回调函数中,必须判断出当前页是否与currentDrawPosition所属同一页:

               false: 将其对应holder中的进度控件设置为原始状态!

               true: 将其对应的Holder的进度控件设置为最新的状态!

 判断是否同一页的逻辑代码:

        holderMap.get(currentBofangPosition)==holder &&

            ((linearLayoutManager.findFirstVisibleItemPosition()>currentDrawPosition) ||

                   linearLayoutManager.findLastVisibleItemPosition()<currentDrawPosition

      第三步: 在滑动时候初始化view相关内容的函数中,加入当前绘制的currentDrawPosition!=position&& holderMap.get(currentDrawPosition)==holder 业务判断,true得出huadongPosition=position;当前position位置的holder复用了正在绘制进度控件所属的holder对象-------根据当前绘制的位置与poistion相等,同时当前的播放的状态为正在播放条件如下 currentDrawPosition==position && huifangState==2说明当前位置position就是正在绘制进度控件的位置!

    

上一篇下一篇

猜你喜欢

热点阅读