首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当视图被隐藏时,为什么Android中recyclerView的viewholder是空的?

在Android中,RecyclerView是一种用于显示大量数据集合的高效列表控件。它通过使用ViewHolder模式来优化列表项的创建和复用,以提高性能和内存效率。

当视图被隐藏时,RecyclerView的ViewHolder可能为空的原因有以下几种可能性:

  1. 视图尚未被创建:RecyclerView在滚动过程中会动态创建和销毁ViewHolder,以便复用视图。当一个列表项被滚动到屏幕外时,其ViewHolder会被回收,视图会被隐藏。如果该列表项再次滚动回屏幕内,RecyclerView会尝试重新使用已回收的ViewHolder,而不是重新创建一个新的ViewHolder。因此,在视图被隐藏时,ViewHolder可能为空,因为它尚未被创建。
  2. 视图已被回收:当一个列表项被滚动到屏幕外时,RecyclerView会将其ViewHolder回收以便复用。在这种情况下,ViewHolder对象仍然存在,但其绑定的视图可能已被隐藏。因此,在视图被隐藏时,ViewHolder可能为空,因为其绑定的视图已被回收。
  3. 视图被移除:在某些情况下,RecyclerView可能会移除列表项的视图,例如调用removeView()方法或更改布局参数。在这种情况下,ViewHolder对象仍然存在,但其绑定的视图已被移除。因此,在视图被隐藏时,ViewHolder可能为空,因为其绑定的视图已被移除。

针对以上情况,可以通过以下方法来处理:

  1. 在RecyclerView的Adapter中,确保在创建ViewHolder时正确初始化视图,并在绑定ViewHolder时更新视图的内容。这样可以避免ViewHolder为空的情况。
  2. 在RecyclerView的Adapter中,重写onViewRecycled()方法,该方法会在ViewHolder被回收时调用。在该方法中,可以对ViewHolder的视图进行重置操作,以确保在复用时不会出现问题。
  3. 在RecyclerView的Adapter中,重写onFailedToRecycleView()方法,该方法会在ViewHolder无法被回收时调用。在该方法中,可以进行一些清理操作,以确保ViewHolder的正确状态。

总结:当视图被隐藏时,RecyclerView的ViewHolder可能为空的原因可能是视图尚未被创建、视图已被回收或视图被移除。为了避免这种情况,需要在Adapter中正确初始化和更新ViewHolder的视图,并在需要时进行适当的重置和清理操作。

相关搜索:Android/ XML :当RecyclerView为空时,在XML的中心创建TextView当IE中的iframe为空时,隐藏iframe中的滚动为什么HttpPostedFile在视图的操作方法中是空的?当RecyclerView的第一个元素被清除时,出现错误“java.lang.IllegalArgumentException:参数必须是此视图的后代”OOP PhP问题:当一个类的属性被插入到数据库中时,当它们不为空时,这些属性是空的。PostgreSQL当我在android中滚动Recyclerview时,项目视图的高度会变小在Android Studio中调用空对象引用的虚拟方法'RecyclerView.setAdapter(RecyclerView$Adapter)‘时遇到错误当类被添加到元素中时,为什么我的CSS没有被应用?当在视图之外或屏幕上的任何其他位置单击时,如何隐藏Recyclerview中某个子视图中的子视图?当使用没有操作栏的主题时,如何在Android中隐藏应用的名称?为什么我的按钮不能被Android中的另一个视图覆盖?当输入是整型变量中的字符串时,为什么输出是4196208?当一个用户表单被卸载时,为什么相关的对象没有被设置为空?进度条不隐藏是当数据以片段的形式加载到回收器视图中时当N=1时,为什么我得到的是一个空列表而不是[0]当UISwitch isOn在swift中时,如何在不同的视图中显示/隐藏标签?当设置setGroupSummary时,为什么Android O中的通知徽章不显示?当docker容器中的一个进程被终止时,为什么会有其他无关的进程被终止当数据被追加到现有数组中时,*ngFor在Angular中是如何工作的?嵌入在NavigationView中的视图(后者隐藏了navBar )每次被推到视图时都会出现问题[SwiftUI]
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • ViewBinding 与 Kotlin 委托双剑合璧

    ViewBinding 是 Android Gradle Plugin 3.6 中新增的特性,用于更加轻量地实现视图绑定(即视图与变量的绑定),可以理解为轻量版本的 DataBinding。...ViewBinding 是 Android Gradle Plugin 3.6 中新增的特性,用于更加轻量地实现视图绑定(即视图与变量的绑定),可以理解为轻量版本的 DataBinding。...不会的, 未使用的类会在混淆时被压缩。 ---- 2. ViewBinding 的基本用法 这一节我们来介绍 ViewBinding 的使用方法,内容不多。...答:Activity 实例和 Activity 视图的生命周期是同步的,而 Fragment 实例和 Fragment 视图的生命周期并不是完全同步的,因此需要在 Fragment 视图销毁时,手动回收绑定类对象...总结 ViewBinding 是一个轻量级的视图绑定方案,Android Gradle 插件会为每个 XML 布局文件创建一个绑定类。

    1.7K20

    实战 | 认识 RecyclerView

    在实现的过程中,我也会将 RecyclerView 的每个部分揉碎了展现给大家,这样大家就可以在自己的应用中实现了。 RecyclerView 是 "何方神圣"?为什么选择它呢?...RecyclerView 是一个容器,它用于显示列表形式 (list) 或者网格形式 (grid) 的数据,比如文本或者照片。 当列表滑动的时候,实际上只有少量邻近的视图会显示在屏幕上。...当视图滑出屏幕时,RecyclerView 会复用它并且填充新的数据。由于它是通过回收已有的结构而不是持续创建新的列表项,所以它可以有效提高应用的时间效率和空间效率。...粉红色的方格表示屏幕上正在显示的表项,黄色的方格表示屏幕可视范围之外的表项是如何被回收并转为新的视图 为什么您需要使用 RecyclerView 呢?...重写 onCreateViewHolder() 当 ViewHolder 创建的时候会调用该方法。在该方法里进行初始化和填充 RecyclerView 中的表项视图。

    1.3K30

    Android经典面试题之RecycleView 深度解析与面试题梳理

    RecyclerView 是 Android 提供的一个高效且功能强大的列表和网格布局管理器,它不仅提高了滑动的流畅性,还通过回收复用视图的方式提高了内存的利用率。...ViewHolder 确保了视图的复用,每个 ViewHolder 对应一个视图,当数据项被滑动出屏幕时,ViewHolder 会被缓存,当新的数据项需要显示时,可以重用这些 ViewHolder。...RecyclerView 的 ViewHolder 机制 ViewHolder 是 RecyclerView 的核心组件之一,它的作用是缓存视图的引用,减少 findViewById 的调用次数,提高性能...每个 ViewHolder 对应一个视图,当视图滑动出屏幕时,ViewHolder 会被缓存,以便复用。 3....结语 RecyclerView 是 Android 开发中处理列表和网格布局的强大工具,它通过一系列优化机制提供了高性能的滑动体验和高效的内存管理。

    17110

    RecyclerView技术栈参考资料:

    为什么命名为RecyclerView?...滚出可见区域的条目将被回收,并在下一个条目可见的时候被复用。 我们可以从下图中得到更直观的解释: ? 左边的图是数据初始化后的示例,当向上滚动视图的时候,当条目不可见之后将被回收。...右图中红色区域内的两条不可见条目,将被放到缓存队列中以便新的条目可见时进行复用。...而且RecyclerView增强了ViewHolder设计模式,这在当前所使用的ListView中是不曾有的。...ItemAnimator作触发于以下三种事件: 某条数据被插入到数据集合中 从数据集合中移除某条数据 更改数据集合中的某条数据 幸运的是,在Android中默认实现了一个DefaultItemAnimator

    1.2K10

    Android RecyclerView使用简述

    下面是获取item布局中的控件,修改一下内部类ViewHolder中的代码,如下所示: public static class ViewHolder extends RecyclerView.ViewHolder...的代码哪里来的,就是你的variable增加时就会通过编译时技术生成的,按住Ctrl键点击setBasicBean就会进入到xml中variable标签的位置,这里的name是basicBean,如果你改成...因为在前面创建ViewHolder时用了不同的内部类,那么在数据渲染的时候也可以通过这个来判断,当前渲染的是哪一个ViewHolder中的视图,关键代码如下所示: @Override public...View.GONE : View.VISIBLE); });   在创建分组item布局的时候我设置RecyclerView为隐藏的,在点击group所在的LinearLayout布局时...,对RecyclerView是否隐藏做判断,首先是修改图标,然后是修改RecyclerView是显示还是隐藏,也是比较简单的代码,但是有效,这里的点击事件处理在适配器中处理会更简单,所以就直接处理了。

    2.4K21

    浅谈RecyclerView的性能优化

    CacheView缓存:mCachedViews又称离屏缓存,用于保存最新被移除(remove)的ViewHolder,已经和RecyclerView分离的视图,这一级的缓存是有容量限制的,默认最大数量为...这里的ViewHolder是已经被抹除数据的,没有任何绑定的痕迹,需要重新绑定数据。...RecyclerView的回收原理 (1)如果是RecyclerView不滚动情况下缓存(比如删除item)、重新布局时。...RecyclerView的复用原理 当RecyclerView要拿一个复用的ViewHolder时: 如果是预加载,则会先去mChangedScrap中精准查找(分别根据position和id)对应的ViewHolder...这是因为setAdapter会直接清空RecyclerView上的所有缓存,但是swapAdapter会将RecyclerView上的ViewHolder保存到pool中,这样当数据源相似时,就可以提高缓存的复用率

    1.8K10

    Android 列表视频

    VideoView盖住,当视频加载好后再把图片去掉(为什么不是VideoView盖住图片,如果这样的话再把VideoView展示出来的时候会有一个黑屏,比较影响体验) 的状态,开始播放时就代表准备好了,就可以把图片隐藏了 if (playState == VideoView.STATE_PLAYING && haveVideo...,但是了解RecyclerView的就知道,这玩意会复用的,前面的holder把图片隐藏了,后面的holder复用的时候重新init数据,走到这发现videoView为空,或者url为空的时候下面就不走了...,这时候视频是没法加载的,展示出来的就是一个黑屏,因为这个holder复用的前面的,前面的已经把图片去掉了,所以后面需要把图片加回来,也就是常说的RecyclerView中写了if,就得写else。...,断点调试url是正确设置的,然后看videoView.start()方法,这里应该是不同实现有不同的写法,我这里的写法是会判断一下这个视频的状态,如果是播放中就不会再执行start(),那为什么会在播放中呢

    93730

    揭开RecyclerView庐山真面目

    谷歌在Android L中新增了RecyclerView,是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式。...在开发RecyclerView时充分考虑了扩展性,因此用它可以创建想到的任何种类的的布局。但在使用上也稍微有些不便,比如使用步骤更加复杂,特别是一些控制点击、长压事件需要自己完成。...需要注意的是编写Adapter面向的是ViewHolder而不在是View了,复用的逻辑被封装了起来,实现更加简单。...除了上面两个主要元素,通常还会使用到如下三个类: ViewHolder:维持了所有被数据填充的实体的视图的引用。 ItemDecoration:一个实体的周围的装饰。...需要注意的是,在网格布局中也可以设置列表的Orientation属性,来实现横向和纵向的网格布局。

    1.8K80

    Android新组件RecyclerView介绍,其效率更好

    RecyclerView介绍 非著名程序员 今天我们首先来说为什么要介绍这个新组件RecyclerView,因为前几天我发布了一个常用面试题ListView的复用及如何优化的文章,介绍给一些开发者,但是我看到有关的反馈说...1、什么是RecyclerView RecyclerView 是 android-support-v7-21 版本中新增的一个 Widgets,官方对于它的介绍则是:RecyclerView 是 ListView...简单来说就是:RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式。...ViewHolder> { private List list; /** * 这里和使用listview时使用的adapter基本一样,...list.remove(position); notifyItemRemoved(position); } } 第二点:LayoutManager 这个LayoutManager类决定视图被放在画面中哪个位置

    1.4K90

    RecyclerView实现混合布局

    PS:好长时间不写博客了,起初是不知道写些什么,后来接触了到了很多东西,原本看似简单的东西,背后都隐藏着巨大的秘密,想handler的使用,一般情况下会引起内存泄漏问题,想着找到方法结局不就得了吗,可是谁想查阅资料发现...表示当前是第几个Item,然后我们可以通过position拿到当前的Item对象,然后判断这个item对象需要那种视图,返回一个int类型的视图标志,然后在onCreatViewHolder方法中给引入布局...RecyclerView.AdapterRecyclerView.ViewHolder>   a:getItemViewType返回type值   b:onCreateViewHolder加载不同的视图..., 方法: 你可以写多个list来存放不同的数据,但是如果是多个的话,返回的数据就一串字符串,你不仅要挑出来,还要存放在多个list里面,下次下拉刷新时还要在多个list中累加数据,这样就有点麻烦了 不挑出来直接就只判断...(View view);这个方法是自定义的需要继承RecyclerView.ViewHolder public class TypeViewHolderOne extends RecyclerView.ViewHolder

    2.3K20

    Android RecyclerView八个必会的面试技巧

    引言 在Android开发领域,RecyclerView是一项强大的工具,用于处理大量数据的高效显示。熟练掌握RecyclerView的知识对于一名Android开发者来说至关重要。...这样在滑动过程中,可以避免频繁地调用findViewById。当Item被滑出屏幕时,ViewHolder会被复用,而不是重新创建。...当ItemView滑出屏幕时,对应的ViewHolder会被缓存,而不是立即销毁。当需要新的ItemView时,可以从缓存中获取ViewHolder,避免频繁的View创建和销毁。...复用机制: 当新的数据需要显示时,RecyclerView会调用Adapter的onBindViewHolder方法,将新的数据绑定到已存在的ViewHolder上,而不是创建新的View。...Scrap缓存: 在RecyclerView内部还有一个Scrap缓存,用于存储一些没有被完全废弃的ItemViews。这个缓存用于快速重用视图,减少了ViewHolder的创建和初始化时间。

    31520

    深入浅出 RecyclerView

    通常,我们写 ListView 适配器,都是: 首先继承 BaseAdapter; 实现四个抽象方法; 创建一个静态 ViewHolder ; getView() 方法中判断 convertView 是否为空...不过 RecyclerView 的 ViewHolder 创建稍微有些限制,类名就是上面继承的时候泛型中声明的类名(或者应该说,上面泛型中的类名需要是这个holder的类名);并且 ViewHolder...而 RecyclerView 是返回一个 ViewHolder 并且不是直接将这个 holder 加入到视图内部,而是加入到一个缓存区域,在视图需要的时候去缓存区域找到 holder 再间接的找到 holder...RecyclerView 的内部维护了一个二级缓存,滑出界面的 ViewHolder 会暂时放到 cache 结构中,而从 cache 结构中移除的 ViewHolder,则会放到一个叫做RecycledViewPool...但是有一点,在 RecycledView 内部的这个第二级缓存池RecycledViewPool 是可以被多个 RecyclerView 共用的,这一点比起直接缓存 View 的 ListView 就要高明了很多

    1.7K60

    Android开发:ListView、AdapterView、RecyclerView全面解析

    什么是ListView 即列表视图,是Android开发中一种常用的视图组件 2. ListView的作用 将所要展示的数据集合起来 以列表的形式展示到用户界面上 3....工作原理:当屏幕需要显示x个item时,那么ListView只会创建x+1个视图,当第一个item离开屏幕时,此item的view就会被拿来重用(用于显示下一个item(即第x+1个)的内容)。...工作原理实例 假如屏幕只能显示7个item,那么ListView只会创建(7+1)个item的视图。当第1个item离开屏幕时,此item的view就会被拿来重用(用于显示第8个item的内容)。...工作原理 当屏幕需要显示x个item时,那么ListView只会创建x+1个视图,当第一个item离开屏幕时,此item的view就会被拿来重用(用于显示下一个item(即第x+1个)的内容)。...当第1个item离开屏幕时,此item的view就会被拿来重用(用于显示第8个item的内容)。原理如下图显示 !

    3.5K30

    ItemTouchHelper 实现交互动画

    当View被滑动删除的时候 onSelectedChanged 当item被拖拽或侧滑时触发 03.简单实现思路 几个方法中代码思路 要想达到上面功能需求,在...在onMove方法中处理拖拽的回调逻辑,那么什么时候被调用?当Item被拖拽排序移动到另一个Item的位置的时候被调用。在onSwiped方法当Item被滑动删除到不见中处理被删除后的逻辑。...itemView而已,当那两个透明缩小的itemView被再次使用时,之前设置的透明度和高度比例已经是0,所以就出现了这种情况,解决方法也很简单,只要在item被移除后,将itemView的透明度和高度比例设置回来即可...侧滑出去时触发(竖直列表是侧滑,水平列表是竖滑) * * @param viewHolder viewHolder * @param direction...} } /** * 当item被拖拽或侧滑时触发 * * @param viewHolder viewHolder * @param

    3.9K20

    Android 基础面试常常吊死在这几个问题上……

    Android面试常常吊死的问题 1、面试官:Context它是什么,有什么用? 2、面试官:什么是Armv7? 3、面试官:为什么字节码不能在Android中运行?...这就是为什么 RecyclerView 会利用以下事实:滚动时,新行出现在屏幕上,而旧行消失在屏幕上。代替为每个新行创建新视图,而是通过将新数据绑定到旧视图来对其进行回收和重用! 应聘者:我学到了!...面试官:你这个回答我是第一次见! ViewHolder模式:Recyclerview实现了ViewHolders模式,但在ListView 中不是必需的。...RecyclerView 在滚动时回收并重用单元格。 LayoutManager:在 ListView 中,唯一可用的视图类型是垂直ListView。...Recyclerview有着更多的动画效果支持! ViewHolder的模式:ViewHolder 对象将每个组件视图存储在 Layout 的 tag 字段内,因此可以立即访问它们而无需重复查找它们。

    2K20

    ListView使用技巧-更新中

    虽然在Android5.X中,RecyclerView在很多地方组件取代了ListView,但是ListView的使用依然是分广泛。 本博文将对以下两方面的内容进行介绍 1....使用ViewHolder模式提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每次在getView()时重复的调用findViewById()....当convertView不为空的时候,直接取出来即可 */ public class ViewHolder { public TextView idtvcontent;...隐藏ListView的滚动条 3.隐藏ListView的滚动条 默认的ListView在滚动时,在右边会显示滚动条,指定当前滚定的位置。...取消ListView的Item点击效果 当点击ListView的某一项Item时,系统默认会出现一个点击效果,在Android5.X上是一个波纹的效果,而在5.X以下是一个改变背景颜色的效果,但是我们可以通过修改

    95530
    领券