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 的是没有问题的。暂时还没有研究 欢迎研究过的大神来解惑。

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,292评论 25 708
  • 一、适用场景 ListViewListview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用...
    Geeks_Liu阅读 10,756评论 1 28
  • 四月的海棠花开了,我却没有观赏,等我抽出时间想再看一看的时候,却猛然发现海棠花早已凋零,只剩下枝干茕茕孑立。世间...
    储药阅读 482评论 0 1
  • 一个人躺在病床上,能看到的只是白色的床,白色的墙,百般无聊。刚刚站在窗口,偷吹了一下14楼的风,感觉自己像飞出去了...
    TheCorner阅读 582评论 1 2
  • 时间久了,可能连做梦都会变得规律,几天,几个礼拜,几个月,我总会梦到同一个人,同一个地方,同一行泪水。 ...
    通心面小姐阅读 135评论 0 0