RecyclerView Item使用MatchParent无效问题

关于 Item 无法matchparent 问题,网上其实已经有个答案,就是在onbinviewholder 方法里。你要把inflate方法参数修改一下。就是改成


LayoutInflater.from(context).inflate(getLayoudId(),parent,false)

经过修改发现 改成这样确实可以解决这个问题。那么这个问题的原因是什么 我查了查源码。发现了点不同 这里记录一下。

下面贴源码 源码当中我已经 贴了注释。大家 看的话应该能看明白。

LayoutInflater.from(context).inflate(getLayoudId(),null)  和 LayoutInflater.from(context).inflate(getLayoudId(),parent,false) 最终调用的都是一个方法

publicViewinflate(@LayoutResintresource,@NullableViewGrouproot,booleanattachToRoot) {

          finalResources res= getContext().getResources();

        if(DEBUG) {

          Log.d(TAG,"INFLATING from resource:\""+res.getResourceName(resource) +"\"("

        +Integer.toHexString(resource) +")");

        }

finalXmlResourceParser parser=res.getLayout(resource);

    try{

          return inflate(parser,root,attachToRoot);

      }finally{

      parser.close();

}


接着看 return的 inflate 方法 一下是经过 省略的源码部分 我做了注释 大家看注释就能看到不同 了

public View inflate(XmlPullParser parser, @Nullable ViewGroup root, boolean attachToRoot) {

    synchronized (mConstructorArgs) {

    final Context inflaterContext = mContext;

    final AttributeSet attrs = Xml.asAttributeSet(parser);

    View result = root;

    try {

        final String name = parser.getName();

    if (TAG_MERGE.equals(name)) {

        // 如果是 merge 标签 的 用另一个方法创建

        rInflate(parser, root, inflaterContext, attrs, false);

      } else {

        // 普通布局 的创建 方法

        final View temp = createViewFromTag(root, name, inflaterContext, attrs);

        ViewGroup.LayoutParams params = null;

        // 这里判断了root 是不是 空

      if (root != null) {

          params = root.generateLayoutParams(attrs);

      if (!attachToRoot) {

          // 设置layoutparams  到这里不同了。不传root 是没有设置params的所以

          设置的matchparent 应该就不好使了。

        temp.setLayoutParams(params);

      }

}

        // 如果不传 root  那么会执行这里。

      if (root == null || !attachToRoot) {

          result = temp;

      }

  }

}

        return result;

}

暂时这两个方法不用之处 就在这。但是 listview 的是没有问题的。暂时还没有研究 欢迎研究过的大神来解惑。

}

你可能感兴趣的:(RecyclerView Item使用MatchParent无效问题)