首页
学习
活动
专区
工具
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]
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 实战 | 认识 RecyclerView

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

    1.2K30

    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.6K20

    Android RecyclerView实现多种item布局方法

    在项目中列表基本都会用到,然而在显示列表,我们需要数据可能需要不止一种item显示,对于复杂数据就需要多种item,以不同样式显示出来,这样效果很棒,我们先看一下效果 ? ?...表示当前第几个Item,然后我们可以通过position拿到当前Item对象,然后判断这个item对象需要那种视图,返回一个int类型视图标志,然后在onCreatViewHolder方法给引入布局...ViewHolder,判断viewHolder属于那种对象,然后在onBindViewHolder根据对应ViewHolder对其控件设置数据并显示 @Override public void...用过ListView都知道,在ListView若要复用视图缓存,就要在getView()方法手动判断convertView是否为,若不为则复用视图缓存,若为则重新加载视图,而RecyclerView...RecyclerView有多少项数据,然后在onCreateViewHolder()中加载item布局实例化ViewHolder,然后在onBindViewHolder()完成数据绑定即可。

    4.3K21

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

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

    2800

    Android RecyclerView使用简述

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

    2.4K21

    RecyclerView技术栈参考资料:

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

    1.2K10

    浅谈RecyclerView性能优化

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

    1.8K10

    Android 列表视频

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

    92930

    android ItemTouchHelper实现可拖拽和侧滑列表示例代码

    /** * item侧滑时调用 * * @param position 侧滑itemposition */ void onItemDismiss(int position...recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { //通知Adapter更新数据和视图...完善 我们实现基本效果与文章开头给出效果还是有一点差距,还需要实现效果: 通过按住 item 左边按钮才能上下拖拽。 侧滑或拖拽操作 item Z轴高度增加,有明显阴影。...viewHolder, int actionState) : ViewHolder (即 item )滑动或拖动调用。...clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) : ViewHolder 滑动和拖拽结束调用 首先新建一个

    1.3K11

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

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

    1.3K90

    AndroidRecyclerView实现动态添加本地图片

    本文介绍了AndroidRecyclerView实现动态添加本地图片,分享给大家,具体如下: 本文所用多图选择library来自:https://github.com/lovetuzitong/MultiImageSelector...; private View view; /** * 在构造方法传入图片地址数据 * @param context * @param imageUrls */ public PassengerAdapter...(R.mipmap.add); //图片添加按钮时候隐藏删除按钮 holder.imageViewSmall.setVisibility(View.GONE); } else { holder.imageViewSmall.setVisibility...extends RecyclerView.ViewHolder { ImageView imageViewBig, imageViewSmall; public ViewHolder(View itemView...,就是在存储图片list最后一项添加一个具有不同标识数据,点击对应标识和该标识一致,则添加,反之为修改。

    1.8K20

    揭开RecyclerView庐山真面目

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

    1.8K80

    RecyclerView实现混合布局

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

    2.2K20

    Android RecyclerView八个必会面试技巧

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

    26820

    android实现微信朋友圈发布动态功能

    本文实例为大家分享了android仿微信朋友圈发布动态功能具体代码,供大家参考,具体内容如下 效果图: ? 本文概述 用到开源库:仿照微信图片选择器,Luban压缩图片,glide ?...上面红圈部分,当用户选中图片时,=9张,那个加号图片就会消失! 本文主要仿照微信发布动态功能,主要时针对微信发布动态,选中图片后变化状态! 整体布局 ?...这可以看到,控制图片状态地方就是一个recyclerview 思路 利用recyclerview多行视图来实现!...微信上效果,先选中图片后才会进入这个界面,这里实现我现在项目中用到效果:默认显示一个带+好图片,点击这个图片,会让你选择图片。...,因为我们默认有一张图片(那个带+图片,用户点击它才会才会让你去选择图片) *集合url为时候,默认显示它,它达到集合9,这个图片会自动隐藏

    3.5K21

    深入浅出 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离开屏幕,此itemview就会被拿来重用(用于显示下一个item(即第x+1个)内容)。...工作原理实例 假如屏幕只能显示7个item,那么ListView只会创建(7+1)个item视图第1个item离开屏幕,此itemview就会被拿来重用(用于显示第8个item内容)。...工作原理 屏幕需要显示x个item,那么ListView只会创建x+1个视图第一个item离开屏幕,此itemview就会被拿来重用(用于显示下一个item(即第x+1个)内容)。...第1个item离开屏幕,此itemview就会被拿来重用(用于显示第8个item内容)。原理如下图显示 !

    3.5K30
    领券