java.lang.IllegalArgumentException: itemView may not be null
报错截图:
场景介绍:在使用recycleView 自动递增数据,且自动滚动到最新行; 当数据达到273条 时出现ANR;
项目中 全部的列表适配器使用的三方库:BaseRecyclerViewAdapterHelper (很早之前的项目)
代码:
public class LogRecyclerViewAdapter extends BaseQuickAdapter<LogBean,BaseViewHolder> {public LogRecyclerViewAdapter(int layoutResId, @Nullable List<LogBean> data) {super(layoutResId, data);}// 避免布局错乱@Overridepublic int getItemViewType(int position) {Log.d(TAG, "getItemViewType1111: " +position);return position;}@Overrideprotected void convert(BaseViewHolder helper, LogBean item) {String title = item.getTitle();String msg = item.getMsg();helper.setText(R.id.log_title_txt,title);helper.setText(R.id.log_msg_txt,msg);// 设置异常字体颜色if(msg.contains("异常")||msg.contains("中断")||msg.contains("失败")){helper.setTextColor(R.id.log_title_txt,Color.parseColor("#FF2C00"));helper.setTextColor(R.id.log_msg_txt, Color.parseColor("#FF2C00"));}}
}
解决 :根据报错提示,百度后解决 需要注释掉重写的getItemViewType 函数,其实是一个三方库的bug;
可参考:https://blog.csdn.net/lovelixue/article/details/103641023
为知其所以然 ,继续跟踪代码;
进入适配器继承的父类:BaseQuickAdapter该类继承自RecyclerView.Adapter<K> , 找到重写的getItemViewType 函数,getItemViewType的返回值 当有其他布局(头部脚部或空布局)时候返回值各自的常量;项目只是单item 没有添加其他View 代码会走
return getDefItemViewType(adjPosition);
该方法会重新定义getItemViewType的值而该值是position变量;
@Overridepublic int getItemViewType(int position) {if (getEmptyViewCount() == 1) {boolean header = mHeadAndEmptyEnable && getHeaderLayoutCount() != 0;switch (position) {case 0:if (header) {return HEADER_VIEW;} else {return EMPTY_VIEW;}case 1:if (header) {return EMPTY_VIEW;} else {return FOOTER_VIEW;}case 2:return FOOTER_VIEW;default:return EMPTY_VIEW;}}int numHeaders = getHeaderLayoutCount();if (position < numHeaders) {return HEADER_VIEW;} else {int adjPosition = position - numHeaders;int adapterCount = mData.size();if (adjPosition < adapterCount) {return getDefItemViewType(adjPosition);} else {adjPosition = adjPosition - adapterCount;int numFooters = getFooterLayoutCount();if (adjPosition < numFooters) {return FOOTER_VIEW;} else {return LOADING_VIEW;}}}}protected int getDefItemViewType(int position) {if (mMultiTypeDelegate != null) {return mMultiTypeDelegate.getDefItemViewType(mData, position);}return super.getItemViewType(position);}
回到:LogRecyclerViewAdapter 类中 ,业务代码在convert函数中实现 跟踪该函数,发现在BaseQuickAdapter中被onBindViewHolder调用,代码如下:它会获取holder的getItemViewType ,其值的已经分析过 取自position ,每次源数据新增一条position就会随之递增;其实报错的时候,还没有执行到该函数,我们需要查看recycleView的源码 执行该方法之前还执行了onCreateViewHolder 函数。
@Overridepublic void onBindViewHolder(K holder, int position) {//Add up fetch logic, almost like load more, but simpler.autoUpFetch(position);//Do not move position, need to change before LoadMoreView bindingautoLoadMore(position);int viewType = holder.getItemViewType();switch (viewType) {case 0:convert(holder, getItem(position - getHeaderLayoutCount()));break;case LOADING_VIEW:mLoadMoreView.convert(holder);break;case HEADER_VIEW:break;case EMPTY_VIEW:break;case FOOTER_VIEW:break;default:convert(holder, getItem(position - getHeaderLayoutCount()));break;}}
@Overridepublic K onCreateViewHolder(ViewGroup parent, int viewType) {K baseViewHolder = null;this.mContext = parent.getContext();this.mLayoutInflater = LayoutInflater.from(mContext);switch (viewType) {case LOADING_VIEW:baseViewHolder = getLoadingView(parent);break;case HEADER_VIEW:baseViewHolder = createBaseViewHolder(mHeaderLayout);break;case EMPTY_VIEW:baseViewHolder = createBaseViewHolder(mEmptyLayout);break;case FOOTER_VIEW:baseViewHolder = createBaseViewHolder(mFooterLayout);break;default:baseViewHolder = onCreateDefViewHolder(parent, viewType);bindViewClickListener(baseViewHolder);}baseViewHolder.setAdapter(this);return baseViewHolder;}
重点看下,switch 方法 ,会逐条遍历viewType,我们分别看case 条件值 ,分别是
public static final int HEADER_VIEW = 0x00000111;
public static final int LOADING_VIEW = 0x00000222;
public static final int FOOTER_VIEW = 0x00000333;
public static final int EMPTY_VIEW = 0x00000555;
是十六进制的魔法数字 ,case ==0 正常调用 0x00000111 转换成十进制是273 ,所以 当position 的值273的 时候,会进入第二个条件执行createBaseViewHolder (mHeaderLayout)此时的参数是null,
该函数表示通过反射的方式获取viewhold
protected K createBaseViewHolder(View view) {Class temp = getClass();Class z = null;while (z == null && null != temp) {z = getInstancedGenericKClass(temp);temp = temp.getSuperclass();}K k;// 泛型擦除会导致z为nullif (z == null) {k = (K) new BaseViewHolder(view);} else {k = createGenericKInstance(z, view);}return k != null ? k : (K) new BaseViewHolder(view);}
进入BaseViewHolder 类中,该类继承自RecyclerView.ViewHolder,作用是封装了各种赋值函数,通过getView 获取到item的view 去赋值等。
public ViewHolder(@NonNull View itemView) {if (itemView == null) {throw new IllegalArgumentException("itemView may not be null");}this.itemView = itemView;}
终于跟踪到报错的地方了。因为当初入参是null 因此条件判断进入itemView ==null ,就有了开始的IDE的输出报错;
完美的闭环
如有不完善的地方,譬如:recycleView源码部分,没有仔细说明,请多多担待;
抱拳;
相关文章:
java.lang.IllegalArgumentException: itemView may not be null
报错截图:场景介绍:在使用recycleView 自动递增数据,且自动滚动到最新行; 当数据达到273条 时出现ANR;项目中 全部的列表适配器使用的三方库:BaseRecyclerViewAdapterHelper (很早之前的项目&am…...
[ 攻防演练演示篇 ] 利用 shiro 反序列化漏洞获取主机权限
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...
达人合作加持品牌布局,3.8女神玩转流量策略!
随着迅猛发展的“她经济”,使社区本就作为内容种草的平台,自带“营销基因”。在3.8女神节即将到来之际,如何充分利用平台女性资源优势,借助达人合作等手段,实现迅速引流,来为大家详细解读下。一、小红书节日…...
观点丨Fortinet谈ChatGPT火爆引发的网络安全行业剧变
FortiGuard报告安全趋势明确指出“网络攻击者已经开始尝试AI手段”,ChatGPT的火爆之际的猜测、探索和事实正在成为这一论断的佐证。攻守之道在AI元素的加持下也在悄然发生剧变。Fortinet认为在攻击者利用ChatGPT等AI手段进行攻击的无数可能性的本质,其实…...
工业企业用电损耗和降损措施研究
来自用电设备和供配电系统的电能损耗。而供配电系统的电能损耗,包括企业变配电设备、控制设备企业在不断降低生产成本,追求经济效益的情况下,进一步降低供配电系统中的电能损耗,使电气设摘要:电网电能损耗是一个涉及面很广的综合性问题,主要包括管理损耗和技术损耗两部分…...
高并发、高性能、高可用
文章目录一、高并发是什么?二、 高性能是什么三、 高可用什么是一、高并发是什么? 示例:高并发是现在互联网分布式框架设计必须要考虑的因素之一,它是可以保证系统能被同时并行处理很多请求,对于高并发来说࿰…...
剑指 Offer 62. 圆圈中最后剩下的数字
摘要 剑指 Offer 62. 圆圈中最后剩下的数字 一、约瑟夫环解析 题目中的要求可以表述为:给定一个长度为 n 的序列,每次向后数 m 个元素并删除,那么最终留下的是第几个元素?这个问题很难快速给出答案。但是同时也要看到ÿ…...
概率论小课堂:高斯分布(正确认识大概率事件)
文章目录 引言I 预备知识1.1 正态分布1.2 置信度1.3 风险II 均值、标准差和发生概率三者的关系。2.1 “三∑原则”2.2 二班成绩比一班好的可能性2.3 减小标准差引言 泊松分布描述的是概率非常小的情况下的统计规律性。学习高斯分布来正确认识大概率事件,随机变量均值的差异和偶…...
剑指 Offer 43. 1~n 整数中 1 出现的次数
摘要 剑指 Offer 43. 1~n 整数中 1 出现的次数 一、数学思维解析 将1~ n的个位、十位、百位、...的1出现次数相加,即为1出现的总次数。 设数字n是个x位数,记n的第i位为ni,则可将n写为 nxnx−1⋯n2n1: 称" …...
如何成为程序员中的牛人/高手?
目录 一、牛人是怎么成为牛人的? 二、关于牛人的一点看法 三、让程序员与业务接壤,在开发团队中“升级” 四、使用低代码平台 目标效果 五、最后 祝伟大的程序员们梦想成真、码到成功! 一、牛人是怎么成为牛人的? 最近在某…...
云原生时代顶流消息中间件Apache Pulsar部署实操之轻量级计算框架
文章目录Pulsar Functions(轻量级计算框架)基础定义工作流程函数运行时处理保证和订阅类型窗口函数定义窗口类型滚动窗口滑动窗口函数配置函数示例有状态函数示例窗口函数示例自定义函数开发定义原生语言接口示例Pulsar函数SDK示例Pulsar Functions(轻量级计算框架) 基础定义 …...
数据结构刷题(十九):77组合、216组合总和III
1.组合题目链接过程图:先从集合中取一个数,再依次从剩余数中取k-1个数。思路:回溯算法。使用回溯三部曲进行解题:递归函数的返回值以及参数:n,k,startIndex(记录每次循环集合从哪里开始遍历的位…...
PyQt 做美*女GIF设置桌面,每天都很爱~
人生苦短,我用python 要说程序员工作的最大压力不是来自于工作本身, 而是来自于需要不断学习才能更好地完成工作, 因为程序员工作中面对的编程语言是在不断更新的, 同时还要学习熟悉其他语言来提升竞争力… 好了,学习…...
[渗透测试笔记] 54.日薪2k的蓝队hw中级定级必备笔记系列篇3之域渗透黄金票据和白银票据
前文链接 [渗透测试笔记] 52.告别初级,日薪2k的蓝队hw中级定级必备笔记 [渗透测试笔记] 53.日薪2k的蓝队hw中级定级必备笔记2 文章目录 Kerberos认证协议NTLM认证协议Kerberos和NTLM比较黄金票据原理黄金票据条件复现过程白银票据原理白银票据条件复现过程黄金票据和白银票据…...
【异常】Spring Cloud Gateway网关自定义过滤器无法获取到请求体body的内容?不存在的!
一、需求说明 项目要使用到网关SpringCloud Gateway进行验签,现在定义了一个过滤器ValidateSignFilter, 我希望,所以过网关SpringCloud Gateway的请求,都能够校验一下请求头,看看是否有Sign这个字段放在请求头中。 二、异常说明 但是,我遇到了SpringCloud Gateway网关…...
CNN 卷积神经网络对染色血液细胞分类(blood-cells)
目录 1. 介绍 2. 加载数据 3. 可视化 3.1 显示单幅图像 3.2 显示多幅图像...
Kubernetes学习(三)Service
Service对象 为什么需要Service 每个Pod都有自己的IP地址,但是在Deployment中,在同一时刻运行的Pod集合可能与稍后运行该应用程序的Pod集合不同。 这就导致了一个问题:如果一组Pod(称为后端)为集群内其他Pod&#x…...
数学小课堂:古德-图灵折扣估计法和插值法(防范黑天鹅事件的方法)
文章目录 引言I 黑天鹅事件产生的原因1.1 置信度1.2 数据的稀疏性1.3 零概率问题II 防范黑天鹅事件的方法2.1 古德-图灵折扣估计法2.2 插值法引言 防范黑天鹅事件的方法 古德-图灵折扣估计法:它主要是解决零概率的事件古德的方法虽然解决了零概率的问题,但是依然没有解决数据…...
redis getshell方法
前言 参考文章 https://paper.seebug.org/1169 https://blog.csdn.net/weixin_55843787/article/details/123829606 https://blog.csdn.net/chenglanqi6606/article/details/100909518 Redis是什么 Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构 …...
【ONE·C || 程序编译简述】
总言 C语言:程序编译相关。 文章目录总言1、程序的翻译环境和运行环境1.1、简述1.2、翻译环境:程序编译与链接1.2.1、简介:程序如何从.c文件形成.exe可执行程序1.2.2、过程说明1.3、运行环境2、预处理详解2.1、预定义符号2.2、#define2.…...
MGAT: Multimodal Graph Attention Network for Recommendation
模型总览如下: 图1:多模态图注意力网络背景:本论文是对MMGCN(Wei et al., 2019)的改进。MMGCN简单地在并行交互图上使用GNN,平等地对待从所有邻居传播的信息,无法自适应地捕获用户偏好。 MMGCN…...
在SNAP中用sentinel-1数据做InSAR测量,以门源地震为例
在SNAP中用sentinel-1数据做InSAR0 写在前面1 数据下载2 处理步骤2.1 split2.2 apply orbit 导入精密轨道2.3 查看数据的时空基线base line2.4 back-geocoding 配准2.5 Enhanced Spectral Diversity2.6 Deburst2.7 Interogram Formation 生成干涉图2.8 Multilook 多视2.9 Golds…...
MySQL常用函数
什么是函数? 函数是指一段可以直接被另一段程序调用的程序或代码。 字符串函数 函数功能CONCAT(S1,S2,…Sn)字符串拼接,将S1,S2,… Sn拼接成一个字符串LOWER(str)将字符串str全部转为小写LOWER(str)将字符串str全部转为小写LPAD(…...
51单片机数字电子钟开题报告
目录 选题背景 初步设计方案 芯片的选型 编译环境 关键问题 策略 方案 参考文献 选题背景 数字电子钟是一种受到越来越多人喜爱的钟表,其准确性和稳定性成为设计和研发的重要考虑因素。在现代社会,时间的准确性对于各行各业都非常重要࿰…...
day7 HTTP协议
HTTP协议 什么是协议? 协议实际上是某些人,或者某些组织提前制定好的一套规范,大家都按照这个规范来,这样可以做到沟通无障碍。协议就是一套规范,就是一套标准。由其他人或其他组织来负责制定的。我说的话你能听懂&…...
3DCAT+一汽奥迪:共建线上个性化订车实时云渲染方案
近年来,随着5G网络和云计算技术的不断发展,交互式3D实时云看车正在成为一种新的看车方式。与传统的到4S店实地考察不同,消费者可以足不出户,通过网络与终端设备即可实现全方位展示、自选汽车配色、模拟效果、快捷选车并进行个性化…...
yii2项目使用frp https2http插件问题
yii2内网项目,使用frp进行内网穿透,使用 https2http插件把内网服务器http流量转成https,会存在一个问题:当使用 $this->redirect(...) 或 $this->goHome() (其实用的也是前者)等重定向时,…...
关于 interface{} 会有啥注意事项?下
我们一起来回顾一下上一次说到的 interface{} 可以用来做多态 接口类型分为空接口类型和非空接口类型,他们的底层数据结构不太一样 这里顺便说一下,用来作态需要满足这样的条件: 首先得有父类指针指向子类的对象这个接口还必须是非空接口…...
ansible组件介绍和简单playbook测试
一、ansible inventory 在大规模的配置管理工作中,管理不同业务的机器,机器的信息都存放在ansible的inventory组件里面。在工作中,配置部署针对的主机必须先存放在Inventory里面,然后ansible才能对它进行操作。默认的Ansible的in…...
[数据结构]:13-插入排序(顺序表指针实现形式)(C语言实现)
目录 前言 已完成内容 插入排序实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-PSeqListFunction.cpp 04-SortCommon.cpp 05-SortFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代…...
网站内页做排名/自动点击器软件
摘要自簡單來說就是可以將一個 or 多個應用包裝成一個服務,並透過 chart 的形式發佈,讓大家可以方便在 k8s 上安裝特定的服務。幾個元件的名詞Tiller server: 用來與API server溝通,使用chart在k8s cluster上建立服務Helm client: 則是用來操…...
文章一键导入wordpress/域名买卖交易平台
1.pip 功能:pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。 2.pip 安装:Python 2.7.9 或 Python 3.4 以上版本都自带 pip 工具。 3.验证pip是否安装: pip --version 4.pip 下载的包的目录…...
小说网站的网编具体做哪些工作/百度指数关键词搜索趋势
状态代码(head)1xx 纯信息(请求已被服务器接受)2xx 成功类(请求已成功地被服务器接收)3xx 重定向(需要后续操作才能完成这一请求)4xx 客户端错误(请求含有词…...
wordpress月亮主题/怎么注册一个自己的网站
附件 qwer 转载于:https://www.cnblogs.com/visi_zhangyang/p/5012867.html...
现在流行的网站开发语言/网站查询进入
Spring Cloud Gateway除了具备请求路由功能之外,也支持对请求的过滤。通过Zuul网关类似,也是通过过滤器的形式来实现的。那么接下来我们一起来研究一下Gateway中的过滤器3.3.1 过滤器基础(1) 过滤器的生命周期Spring Cloud Gatewa…...
东营网站建设优化/google中文搜索引擎
前言今天跟大家分享下SpringBoot 常见高频面试题的知识。下面是小编关于SpringBoot的知识点总结了一个思维导图,希望对大家所有帮助!话不多说,下面我们开始正题:1. 什么是SpringBoot?通过Spring Boot,可以轻松地创建独…...