Android RecyclerView显示Item布局不一致解决办法
发布时间 - 2026-01-11 02:10:27 点击率:次RecyclerView显示Item布局不一致

在自定义RecyclerAdapter的时候,在重写onCreateViewHolder方法是使用了
@Override
public H onCreateViewHolder(ViewGroup parent, int viewType) {
View view=View.inflate(context,layoutId,null);
return view;
}
进行生成布局,结果发现生成的布局没有LayoutParams。以前自定义View的时候发现,LayoutParams是由于ViewGroup生成的,因为这里添加的ViewGroup为null。所以并不会生成LayoutParams。结果在RecyclerView的getViewForPosition方法中检查了有没有LayoutParams如果没有的话就调用LayoutManager的generateDefaultLayoutParams生成默认的LayoutParames。代码段如下:
final ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();
final LayoutParams rvLayoutParams;
if (lp == null) {
rvLayoutParams = (LayoutParams) generateDefaultLayoutParams();
holder.itemView.setLayoutParams(rvLayoutParams);
} else if (!checkLayoutParams(lp)) {
rvLayoutParams = (LayoutParams) generateLayoutParams(lp);
holder.itemView.setLayoutParams(rvLayoutParams);
} else {
rvLayoutParams = (LayoutParams) lp;
}
而在LinearLayoutManager中generateDefaultLayoutParams方法实现如下。
/**
* {@inheritDoc}
*/
@Override
public LayoutParams generateDefaultLayoutParams() {
return new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
}
最终会造成RecycleView的显示效果与布局文件不一致。后来使用了LayoutInflater来填充布局。
@Override
public H onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(layoutId, parent, false);
return getInstanceOfH(view);
}
查看LayoutInflater源码发现inflate最后的参数如果是false的话就不会将生成的View添加到parent。但是会根据parent产生相应的LayoutParams 。源码如下:
* @param attachToRoot Whether the inflated hierarchy should be attached to * the root parameter? If false, root is only used to create the * correct subclass of LayoutParams for the root view in the XML.
因为在onCreateViewHolder中产生的View不能由我们手动添加到RecycleView中所以最后的参数只能是false;
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# RecyclerView显示Item布局不一致
# RecyclerView显示Item
# Android RecyclerView滑动删除和拖动排序
# Android RecyclerView item选中放大被遮挡问题详解
# Android RecyclerView实现多种item布局的方法
# Android使用CardView作为RecyclerView的Item并实现拖拽和左滑删除
# Android中RecyclerView实现Item添加和删除的代码示例
# Android中RecyclerView的item宽高问题详解
# Android RecyclerView的Item点击事件实现整理
# Android 中RecyclerView多种item布局的写法(头布局+脚布局)
# Android RecyclerView自由拖动item的实现代码
# 自定义
# 使用了
# 就不
# 而在
# 希望能
# 如果没有
# 重写
# 谢谢大家
# 会将
# 显示效果
# 是由于
# inflate
# generateDefaultLayoutParams
# view
# return
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251811 】
【
AI营销90571 】
相关推荐:
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
网站建设整体流程解析,建站其实很容易!
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
微信公众帐号开发教程之图文消息全攻略
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
如何确保西部建站助手FTP传输的安全性?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
中山网站制作网页,中山新生登记系统登记流程?
nginx修改上传文件大小限制的方法
Python文件流缓冲机制_IO性能解析【教程】
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Laravel如何创建自定义Facades?(详细步骤)
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Laravel怎么判断请求类型_Laravel Request isMethod用法
Laravel怎么使用Intervention Image库处理图片上传和缩放
非常酷的网站设计制作软件,酷培ai教育官方网站?
利用JavaScript实现拖拽改变元素大小
LinuxCD持续部署教程_自动发布与回滚机制
Laravel storage目录权限问题_Laravel文件写入权限设置
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
高防服务器租用首荐平台,企业级优惠套餐快速部署
b2c电商网站制作流程,b2c水平综合的电商平台?
如何在云服务器上快速搭建个人网站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
北京专业网站制作设计师招聘,北京白云观官方网站?
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
如何用好域名打造高点击率的自主建站?
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
微信小程序制作网站有哪些,微信小程序需要做网站吗?
千库网官网入口推荐 千库网设计创意平台入口
html5的keygen标签为什么废弃_替代方案说明【解答】
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
智能起名网站制作软件有哪些,制作logo的软件?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
Laravel如何处理和验证JSON类型的数据库字段
Windows Hello人脸识别突然无法使用
公司网站制作价格怎么算,公司办个官网需要多少钱?
如何在Ubuntu系统下快速搭建WordPress个人网站?
如何构建满足综合性能需求的优质建站方案?
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
制作企业网站建设方案,怎样建设一个公司网站?
七夕网站制作视频,七夕大促活动怎么报名?
原生JS获取元素集合的子元素宽度实例

