全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android RecyclerView显示Item布局不一致解决办法

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 


相关文章: ,有什么在线背英语单词效率比较高的网站?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  如何选择网络建站服务器?高效建站必看指南  如何基于云服务器快速搭建网站及云盘系统?  制作网站外包平台,自动化接单网站有哪些?  怀化网站制作公司,怀化新生儿上户网上办理流程?  建站之星价格显示格式升级,你的预算足够吗?  Python lxml的etree和ElementTree有什么区别  建站VPS选购需注意哪些关键参数?  如何在企业微信快速生成手机电脑官网?  建站之星展会模版如何一键下载生成?  建站之星导航如何优化提升用户体验?  高防服务器如何保障网站安全无虞?  如何构建满足综合性能需求的优质建站方案?  Swift开发中switch语句值绑定模式  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  建站之星后台管理如何实现高效配置?  网站制作价目表怎么做,珍爱网婚介费用多少?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  高端云建站费用究竟需要多少预算?  如何规划企业建站流程的关键步骤?  建站之星如何取消后台验证码生成?  如何在阿里云域名上完成建站全流程?  黑客如何利用漏洞与弱口令入侵网站服务器?  ,在苏州找工作,上哪个网站比较好?  学校为何禁止电信移动建设网站?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  深入理解Android中的xmlns:tools属性  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  制作旅游网站html,怎样注册旅游网站?  制作网站怎么制作,*游戏网站怎么搭建?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  网站制作员失业,怎样查看自己网站的注册者?  c# await 一个已经完成的Task会发生什么  招商网站制作流程,网站招商广告语?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  ,怎么用自己头像做动态表情包?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  音乐网站服务器如何优化API响应速度?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  如何获取上海专业网站定制建站电话?  三星网站视频制作教程下载,三星w23网页如何全屏?  山东网站制作公司有哪些,山东大源集团官网?  如何通过WDCP绑定主域名及创建子域名站点?  如何用5美元大硬盘VPS安全高效搭建个人网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。