Android中RecyclerView显示Item布局不一致怎么办

这篇文章将为大家详细讲解有关Android中RecyclerView显示Item布局不一致怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联建站-专业网站定制、快速模板网站建设、高性价比济水街道网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式济水街道网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖济水街道地区。费用合理售后完善,十余年实体公司更值得信赖。

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布局不一致怎么办”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


网站栏目:Android中RecyclerView显示Item布局不一致怎么办
转载来于:http://bzwzjz.com/article/jdojis.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都定制网站建设 重庆网站制作 成都网站制作公司 网站建设公司 温江网站设计 手机网站建设 成都网站建设推广 成都网站设计 成都网站制作 成都做网站建设公司 成都网站设计制作公司 自适应网站设计 专业网站设计 营销型网站建设 营销型网站建设 高端网站设计 重庆网站设计 网站建设改版 网站制作 广安网站设计 高端网站设计 响应式网站建设