遇到的问题
在写一个功能时,不得已采用方案:RecyclerView
嵌套GridView
,于是乎,坑来了。
先来看看最原始版本的ViewHolder
的代码:
|
|
然后在 onBindViewHolder
里给girdView
setAdapter
和setOnItemClickListener()
好了,到这问题来了:
girdView
点击事件丢失,而且只在滑出屏幕大概两个item的时候,再滑回来出现。
- 由于
RecyclerView
的item会有“展示更多”button的伸展操作,在伸展完后,复用时,item高度错误,出现大片空白。
- 由于
如何解决
看这种情况,明显是复用出了问题啊。
对于问题2. 临时解决方案:不复用这种类型的item(仅仅是临时,因为问题1的解决方案可以解决问题2)
如何不复用RecyclerView
的某种ViewHolder
?一句代码如下
|
|
对于问题1. 嗯,思考良久,决定把Adapter
相关操作放到ViewHolder里,并自定义click事件
|
|
对 CourseSubAdapter
的 getView()
里给 convertView
设置监听。问题可以解决。
到现在,问题2也可以解决。其实就是复用出了问题。
然后又出现了问题3
- 发现 item 滑动后又混乱了
断点调试发现,gridView
的Adapter
也Notify
了,数据都已更新,但是gridView
UI并没有更新。只好gridView.requesetLayout()
解决。
在onViewRecycled
里清空gridView
的adapter
数据,并requesetLayout()
可以,如果这样的话,在onBindViewHolder
里可以直接notify;
也可以每次在onBindViewHolder
setData
后直接requesetLayout()
RecyclerView复用机制决定下一篇记录一下~。