最近在做项目的时候,用到了可扩展的RecyclerView.在github上找到了一个ListView的第三方库,比较臃肿,下面是自己实现的一个可扩展RecyclerView.源代码地址点我
演示地址
原理
首先要把整个扩展RecyclerView
的功能逻辑分成两部分:
- 根据TAG来判断每个ViewHolder所对应的展开状态
通过对每一个ViewHolder中的触发扩展事件的LinearLayout
使用setTag()
方法,设置TAG,每一个数据的position就是这个唯一的TAG.然后把已经变成展开状态的ViewHolder中事件触发按钮的TAG记录下来.当数据绑定时,根据得到的TAG是否是展开状态的TAG来设置View的展开状态. - 当点击某个item,改变展开状态时,上一个展开过的item(如果有的话)状态要还原,但是上一个item有可能已经被复用了,所以要重写
onViewRecycled()
方法,判断上一个展开的viewHolder是否被复用,再做处理.