Android使用RecyclerView,ViewHolder被重用问题

我使用RecyclerView进行列表展示,有十条数据,在每个Item中都可以点击按钮对数字进行更改,但是当我更改第一个Item之后,最后一个也改变了。这种由于ViewHolder重用的问题该怎么解决。
图片说明
图片说明

3个回答

你应该把每个item的数据放到list中,在onBindViewHolder函数中根据position进行刷新

因为你向上拉的过程中,第一个item消失,下一个item出现时就会复用第一个item的布局。解决办法是:你可以绑定convertview与viewholder,
并且添加tag去区分。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
RecyclerView中ViewHolder重用机制理解(解决图片错乱和闪烁问题)
RecyclerView中ViewHolder重用机制理解(解决图片错乱和闪烁问题)对于使用ViewHolder引起的图片错乱问题,相信大部分人都有遇到过,我也一样,对于解决方法也有所了解,但一直都是知其然不知其所以然。所以,这次直接把ViewHolder的工作原理,通过简单的demo代码来验证一次,验证后对于图片错乱和闪烁这种问题的成因就很清楚了。
Recyclerview由于ViewHolder的复用显示错乱问题解决
Recyclerview由于ViewHolder的复用显示错乱问题解决
RecyclerView 的回收和复用
RecyclerView 的回收和复用前段时间在面试的时候这个问题被问到过,可惜自己在用的时候只知道 RecyclerView 可以通过回收和复用 view 来达到减少创建视图的优化。单内部是怎么缓存的?缓存多少?怎么区分不同的 View?趁这个周清闲,把这个问题解决一下,源码之下无密码,那我们就从源码入手!View 的回收/** * 使用给定的回收机制删除子视图并回收 */ public void
Android RecyclerView中ViewHolder的复用导致数据错乱解决办法
看图: 视觉效果、recyclerview的基本用法都不说了,超级简单,稍后看代码。 重点来说说item状态的保存问题,其实这个也不是什么新鲜问题,处理起来也不难,方法众多,有setTag的,也有保存到map的。接下来我展示一种自认为更优的方式。 先描述问题,如上图,我们选中了第三个item。然后滑动RecyclerView,让第三个item移出界面后,在滑回来,item的状
ListView使用ViewHolder时控件数据错乱的注意事项
ListView使用ViewHolder出现复用冲突的原因: 因为复用的原理就是 行布局中 子控件对象的复用: 1.滑动过程中将已完全不显示的控件用行布局的setTag方法保存到ViewHolder中,保存的对象用于下一个即将显示的控件 2.下一个即将显示的控件没有findViewById,而是直接使用了行布局getTag()方法返回的对象(返回的对象不一定) 3.行布局存在CheckBo
解决RecyclerView代码复用问题
方法一. holder.setIsRecyclable(false);//取消复用,但会造成卡顿 方法二.在Adapter下(就是添加一个标记集合,当是否点击,如果是就添加到这个集合中,否就移除,再判断一次当前是否在这个集合中,是就显示点击的状态,否就显示未点击状态) privateList Livelist=new ArrayList   onBindViewHolder下 playv
Android性能优化之Listview(ViewHolder重用机制)
相信大家在很多时候都会用到ListView这个控件,因为确实是用的很多很多,但是有木有遇到过当数据很多很多的时候,往下滑ListView时有时候会卡顿,这就需要我们来优化它了。 ListView优化主要有下面几个方面: 1、convertView重用 2、ViewHolder的子View复用 3、缓存数据复用 一、convertView重用 首先讲下ListView的原
ListView的优化。contentView的复用和ViewHolder的使用
BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView、GridView、Gallery、Spinner等等。它是直接继承自接口类Adapter的,使用BaseAdapter时需要重写很多方法,其中最重要的当属getView,因为这会涉及到ListView优化等问题,其他的方法可以参考链接的文章。   BaseAdapt
RecyclerView的复用导致的多选混乱
先看图 点击第一条和第二条,后面的第24条和25条也被选上了。这个问题是recyclerview的item复用导致的。具体原因我正在看,解决办法如下。 首先,主页面的布局就只有一个recyclerview。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schem...
RecyclerView中,图片加载重用问题,异步加载图片
额,首先要感谢这位兄台,然后我就直接上代码吧 解决方式1 demo代码: public class MyRecyclerAdapter extends RecyclerView.Adapter { private static final String TAG = "MyRecyclerAdapter"; private List mData; private Context mCon
RecyclerView的Item复用出现问题导致排版混乱
在ListView中用setTag来解决Item的复用问题,但是RecyclerView中已经帮我们封装好了复用,如果在项目中出现了RecyclerView的复用性问题时.谈谈我碰到的那些坑. 1.问题描述和分析: RecyclerView设置数据源时加入了if判断,导致item重用时没有进入if判断.继续复用原来设置的UI属性. 解决方案: 可以检查重写的onBi
Android ListView适配器Adapter的使用,item的复用和ViewHolder优化
概述rnrnrn数据适配器:由于数据源的多样性及ListView的固定数据格式,需要使用Adapter建立数据源和ListView的动态适配关系。Adapter解耦了数据的来源和显示,降低了程序的耦合性,使之更易扩展。rnListView的缓存机制:如需同时显示5条数据,滑动时最多会同时显示6条数据,因此系统将加载6个item布局。当向上滑动至第一个item不可见时,该item则进入缓存池。当第7
RecyclerView使用中同一个Item总是有两个viewholder对象
场景:RecyclerView使用中同一个Item总是有两个viewHolder对象。 比如需要在viewHolder中保存上次刷新的数据时,同一个item有两个viewHolder对象,肯定时不行的,这时只需要在mRecycler中设置setSupportsChangeAnimations()为false即可。((SimpleItemAnimator)mRecycler.getItemAnima
Android 在不可操作时 获取Recyclerview的viewholder并动态改变view
Android 在不可操作时 获取Recyclerview的viewholder并动态改变view
让偷懒更彻底——用Butterknife 来为recyclerview 打造通用适配器(上)
背景随着recyclerview 的越来越普及,其高度的易用性,让我们越来越爱不释手,当然网上也出现了很多类似的通用适配器,让我们更加方便的使用它,今天我们这里介绍一种新的recyclerview的通用适配器的实现思路——把recyclerview和ButterKnife结合起来使用(ps:因为公司开发一直使用butterknife,才有了这种想法)。首先贴上我的实现效果:代码用法使用:ModelR
RecyclerView获取某个item的VIewHolder、View为空的问题
就一句话,这个Item是否可见,可见获取得到,不可见获取为空   1.RecyclerView的二级缓存机制 在RecyclerView中,有两个缓存:Scrap和Recycle。Scrap中文就是废料的意思,Recycle对应是回收的意思。这两个缓存有什么作用呢?首先Scrap缓存是指里面缓存的View是接下来需要用到的,即里面的绑定的数据无需更改,可以直接拿来用的,是一个轻量级的缓存集...
Android RecycleView 实现单选列表 并解决View复用导致错乱问题
1.缓存机制 离屏的ItemView即被回收至缓存,入屏的ItemView则会优先从缓存中获取 因此实现单选的过程中会出现多选的情况或内容错乱,原因是取得是之前的缓存的item布局。 2.解决办法 使用if else做不同处理 不同类型item 重写 getItemViewType() @Override public int getItemVi
Android——RecyclerView——ViewHolder全部源码及翻译、注释
看了rv的源码 知道了他有 viewholder、动画类、自己定义的layoutparams类,recycler类等。 viewHolder:相当于就是一个item,只不过建了这样一个类,去维护这个item,以及view的全部元数据。 //内部维护1个item,在oncreateviewholder中,每次都是不一样的itemview public final View
适配器中定义的ViewHolder为static相比于非static有什么好处?
我百度了一下,说是使用静态,是保证holder = new ViewHolder();时不会重新分配内存空间,节省内存rn但是还有人说是什么保持对象的唯一性,但是有人反对说除非ListView的item只有一个条目。。。rn想请教一下关于保持唯一性这个说法是否恰当
RecyclerView 复用错乱通用解法
RecyclerView 复用错乱通用解法写在前面: 在上篇文章中说过对于像 RecyclerView 或者 ListView 等等此类在有限屏幕中展示大量内容的控件,复用的逻辑就是其核心的逻辑,而关于复用导致最常见的 bug 就是复用错乱。在大上周我就遇到了一个很奇怪的问题,这也是我下决心研究 RecyclerView 的原因。RecyclerView 源码分析而这篇文章的目的首先是讨论在 Re
面试常考点之RecyclerView回收和复用机制最全分析
热文导读 | 点击标题阅读欢迎加入Java和Android架构知识星球吊炸天!74款APP完整源码!最新Android框架排行榜,上百项资源汇总!作者:神奇的小蘑菇原文:http://www.apkbus.com/blog-949976-77400.html开始最近在研究 RecyclerView 的回收复用机制,顺便记录一下。我们知道,RecyclerView 在 layout 子 View 时
RecyclerView解决条目错乱以及图片闪越+三级缓存机制
RecyclerView导致条目错乱的原因:viewHolder的复用,一个复用的ViewHolder他里边的View有些属性已经被修改了,所以新的item在使用服用的viewHolder时,那些被修改的viewHolder里边的属性还依然存在,所以会导致新的item也应用到了原来的viewHolder属性,导致出现错乱 解决recyclerView加载图片闪越问题和图片错乱的问题
在Android中使用kotlin(recyclerview的使用)
随着google宣布kotlin作为官方开发语言,在Android中使用kotlin的趋势也越来越明显,下面是我们在项目中常用的控件(recyclerview),那么我们在项目中怎么来将Java代码改写为kotlin代码呢,下面我们就来一步一步操作: 1、首先是我们的布局文件,没什么说的,按照原来的写法就好 2、关于控件的初始化:目前我所发现的是有两种写法   1)没有加  apply pl
Android中Recyclerview使用9----Recyclerview的条目复用,出现CheckBox或者设置背景混乱问题
由于RecyclerView 与ListView 都使用了复用技术,所以会出现滚动后出现CheckBox选中混乱或者是Item的背景混乱问题。 解决办法: 1.在onBindViewHolder(...) 方法中添加下面代码 ViewHolder.setIsRecyclable(false);     这里直接关闭掉RecyclerView的复用功能,这是不推荐的,通过网上的资料知道,
Kotlin在ViewHoler定义变量注意不要跟RecyclerView里面的ViewHolder中的itemView冲突
Kotlin在ViewHoler定义变量注意不要跟RecyclerView里面的ViewHolder中的itemView冲突 可以看到这里在RecyclerView中的ViewHolder也定义了一个itemView,在我们子类只要换个不同的名字就可以了。
关于在外部拿到RecyclerView的viewholder的几种方式
在实际开发中,我们常常碰到这样的需求,需要在外部拿到RecyclerView 中的viewHoler,从而动态的修改UI,在RecyclerView中,我们需要自己封装点击事件,一般的做法是在recyclerview每一次bind的时候我们给viewholder的itemview注册监听事件,典型写法如下: @Override public void onBindViewHold
解决ListView滚动复用convertview和ViewHolder数据填充错乱
我说下我的理解,最可能出现重复的情况就是getView(int position, View convertView, ViewGroup parent)中的convertview利用的情况,由于getview的时候,listview自身会复用已存在的item,即重用最先新建的那几个item,还有就是注意tag的使用,convertView.getTag()返回的也是重用的view,其状态是和被重
Android开发自定义RecyclerView的Adapter基类以及通用ViewHolder的写法
简单的写一个Adapter基类,不用每次写adapter都调用一堆方法。 import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import java.util.List; publi...
RecyclerView获取某个item的VIewHolder、View为什么会为空
转载 :https://blog.csdn.net/z979451341/article/details/79099201就一句话,这个Item是否可见,可见获取得到,不可见获取为空平常我们使用RecyclerView的findViewHolderForAdapterPosition(int position)获取ViewHolder,使用LayoutManager的findViewByPosit...
【已解决】onCreateViewHolder中的代码错误,导致程序崩溃
问题: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. at android.view.ViewGroup.addV
recycleview复用导致数据错乱解决的3种方法
这是网上贴上的一张图片1.第一种简单粗暴,直接在viewholder设置如下代码即可,但性能可能大打折扣innerFragmentMyOderByViewHolder.setIsRecyclable(false);2.第二种,推荐使用,在需要使用的viewholder 中对使用到的实体bean增加需要设置的状态字段,如user 中booeal ischeck=false,当点击该item中改变is...
开启固定模式的viewpager的复用模式+PagerAdapter浅解析
现在android的adapterview几乎都要用到viewholder模式,然而viewpager几乎被人遗忘使用viewholder。 其实ViewPager的ViewHolder模式也并不是那么的难使用,但adapter重写的方法不同,这让我们看似无从下手! public class ImagePagerAdapter extends PagerAdapter{ public
如何解决在 getView()使用ViewHolder导致position错乱
我在做项目时遇到当自定义Listview的adapter时在getview()中用了viewholder做为缓存机制,当我点击每一项时要跳转到另一个页面,跳转时要传递当前view上的title参数,这时我发现position是错的,它并不是当前view的position。 adapter的getView方法中使用viewholder类中的一个控件,例如我的Textview title(这里一定要设
Android开发中ViewHolder模式的复用写法&&一劳永逸哦
今天给大家分享一个很实用的ViewHolder中的写法。这个大家肯定写adapter的时候是基本都会写的,主要是用来缓存控件,优化加载的效率。 很多时候,我们都是自定义一个adapter,然后继承BaseAdapter,并重写相关方法。最后在这个adapter类里写一个ViewHolder内容类,用来缓存控件用。写法如下: @Override public View getView(int
使用 Payload 提高 RecyclerView 渲染效率
RecyclerView.Adapter 中有个带有 payloads 参数的函数,由于这个函数不是抽象函数,被很多人忽略了。该函数定义如下: public void onBindViewHolder(VHholder, int position, ListObject> payloads) {             onBindViewHolder(holder, position);
ViewHolder模式获取控件空指针异常,小错误很坑爹
在用ViewHolder模式是用以下方式加载控件:
Android5.0新控件——RecyclerView的使用全解
介绍RecyclerView与ListView原理是类似的:都是仅仅维护少量的View并且可以展示大量的数据集。RecyclerView用以下两种方式简化了数据的展示和处理:使用LayoutManager来确定每一个item的排列方式。 为增加和删除项目提供默认的动画效果。 你也可以定义你自己的LayoutManager和添加删除动画,RecyclerView项目结构如下: Adapter:使
Android-RecyclerView列表倒计时错乱问题
前言 转眼间距离上次写博客已是过了一个年轮,期间发生了不少事;经历了离职、找工作,新公司的第一版项目上线。现在总算是有时间可以将遇到的问题梳理下了,后期有时间也会分享更多的东西~~ 场景 今天分享的问题是当在列表里面显示倒计时,这时候滑动列表会出现时间显示不正常的问题。首先关于倒计时我们需要注意的问题有以下几方面: 在RecyclerView中ViewHolder的复用导致的时...
实现瀑布流功能解决view复用造成的item高度变化问题。
实现瀑布流列表我用了AndroidStaggeredGrid这个控件,可以在github搜索下载,当然给它加上PullToRefresh实习下拉刷新和加载更多功能,由于服务器返回的图片同时也返回了图片的宽度和高度,每一张图片的高度不一样,必须实现等比绘制,可以用AndroidStaggeredGrid里的DynamicHeightImageview这个控件。    由于适配器的getView有复
基类RecyclerViewAdapter以及BaseViewHolder。减少适配器的重复代码量
对于adapter我们在熟悉不过了。往往适配器多了也写着烦,都是堆叠代码。。。 为了减少代码量,写一个合理的基类还是挺不错的。 正好,整合最近网上看到的一些资料,以及现在项目中使用的,也来一发。。。 首先还是先来看一下对比的最终效果: 1、正常的RecyclerViewAdapter的写法 public class BaseAdapter2 extends
android RecycleView解决多线程情况下图片错乱问题与OOM问题(原生代码,无插件)
-RecycleView的图片错乱问题跟ListView和GridView的图片错乱原因有相同之处,都是由于ViewHolder的复用而产生的,在加载延迟的情况下,肯定会出现这种图片错乱的现象 -不同的是,RecycleView有自带的Recyler来复用被detach和scrap的holder,而ListView和GridView是通过View的getTag和setTag来复用view,后者的解
RecyclerView缓存分析
缓存介绍 public final class Recycler { final ArrayList mAttachedScrap = new ArrayList<>(); ArrayList mChangedScrap = null; final ArrayList mCachedViews = new ArrayList(); //
关于在recycleview中点击item获取对应的viewholder的方法
关于在recycleview中点击item获取对应的viewholder的方法当使用recyclerView+CardView的时候,有时可能需要点击某一个item对其中的view进行操作,这时需要先获取点击的item的viewHolder。第一步: 在onBindViewHolder中 对viewHolder 使用setTag给对应的viewHolder添加Tag。public void on
RecyclerView的使用与深入分析
最近一直在捣鼓RecyclerView,今天闲来无事就把之前收集到的资料和使用过程中的体会整理一下,写了如下这篇博客。博客的结构跟之前的博客结构类似,首先简单交代背景,随后给出一个简单使用的实例,最终根据前面遇到的一些问题,走进底层看看源码如何实现。不过我们的重点是分析RecyclerView的ViewHolder资源回收策略。顺便吐槽一句一九八网络科技V客学院(http://blog.inet198.cn/)真是傻逼,如果网友是从这里进的还请移步CSDN,那边显示效果好点!
DataBinding的使用总结-进阶篇(recyclerView)
基础篇项目代码:放在前面以防有人看不到   https://github.com/summerhotready/KotlinCol/tree/bindingOrigin基础篇讲述的是如何配置和使用db,并提供了稳定版本的参数,下面我们聊一聊使用最普遍的recyclerView是如何使用DB的我们使用RV一般有两种情况,单布局和多布局,单布局简单明晰,就易用性来说比不上ListView,但倘若要做上
安卓RecyclerView的使用以及抽取基类
安卓RecyclerView的使用以及抽取基类1.引入:在moudle中的build.gradle文件里,找到dependencies,添加关于recyclerView的引用:compile 'com.android.support:recyclerview-v7:24.2.0' //这里的版本需要和V7包相对其实design包中含有Material Design相关的很多控件,其中也包括了rec
RecyclerView回收机制分析--“取”
RecyclerView的回收被封装在内部类Recycler中 从这个类的成员变量就能略窥一斑 /** * A Recycler is responsible for managing scrapped or detached item views for reuse. * * A "scrapped" view is a view that is stil
Android ListView中怎么解决CheckBox复用的问题
ListView为了优化滑动速度,防止内存泄露,经常涉及到控件重用的问题,已经选中的CheckBox在滑动消失之后,会导致最新出现的Item由于复用的问题,与消失的Item中CheckBox选中状态一致,也变为选中状态(实际未选中)。 为什么会出现这种问题呢? 因为我们在convertView复用的时候,虽然减少了不必要的View的创建,但是也复用了CheckBox的选择状态,所以当然会
RecyclerView缓存机制总结
参考 enter link description here入口Scroll、onLayout -> RecyclerView.dispatchLayoutStep2() -> RecyclerView.onLayoutChildren() -> ItemView:LayoutManager.fill() -> LayoutManager.layoutChunk() -> LayoutState.n
RecyclerView导致内存泄漏问题分析
ListView中包含RecyclerView导致的内存泄漏问题分析
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问