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获取元素集合的子元素宽度实例