解决android中recyclerview和listview的条目点击冲突问题

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的点击事件,其它控件也可以这样处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,776评论 25 709
  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 47,029评论 22 665
  • 蒲公英除了在空气中跳舞,还有一份秘密的工作,送信。 阳光铺好了金黄色的路,春风让它们飞起来比骑自行车还快。 送信给...
    小雨王阅读 5,121评论 24 42
  • 今天看的是王安忆的《长恨歌》,也是矛盾文学获奖作品,今天看的是第一二小节弄堂跟流言,作者对弄堂跟流言的描写,我看的...
    hanxuerping阅读 1,813评论 0 0