android中listview和recyclerview是一个非常常用的控件,但是它有很多问题,现在大多都采用viewholder模式和item复用。大大提高了它的利用效率,如何条目简单的话就没什么问题,但是如何条目复杂就会出现各种问题,最常见的就是复用问题。
复用的原理图:
很简单明了,这就是listview和recyclerview的复用,它不会去创建,而是复用之前移除屏幕的item
那么当之前的item有了点击事件或者其他选中之类的操作,那之后的item也会有,所以就出现了复用的问题。现在网上有各种各样的办法,我提供的这个比较简单,没有什么难度。
解决思路:在获取item中判断我们的控件是否已经处理过。
我们具体来举个实例:现在有一个recyclerview的item布局 我们需要在这个item中处理一个类似点赞的效果,如果我们不处理复用,那当我们点击一个之后,那之后复用该item的肯定也是点击之后的效果。所以我们需要处理,具体方法如下:
在adapter中的onbindviewholder方法中就是设置每一个item的,listview是在getview中
1.我么需要先再我们adapter类中加一个保存我们处理该控件的arrylist
2.然后再在我们的onBindViewHolder方法中为我们的每一个点赞的Imageview设置一个tag
3.当我们设置该Imageview的点击事件时,我们要将点击的ImageView的tag取出来放在我们之前的arraylist中保存
4.当然我们还要记得再次点击的时候移除该ImageVIew的tag
5最近可以在我们的onBindViewHold方法中判断我们是否处理了该控件,是否处理过其实就是该position是否包含在arraylist中,arraylist中存的是Imageview的tag,Imageview的tag就是position
这里只是简单的写了一下Imageview的点击事件,其它控件也可以这样处理。