recyvlerView The specified child already has a parent. You must call removeView() on the child's...

adapter 错误的代码

 @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int position) {
        View view = LayoutInflater.from(mActivity).inflate(R.layout.item_recommend_model,parent);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

adapter正确的代码

@Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int position) {
        View view = LayoutInflater.from(mActivity).inflate(R.layout.item_recommend_model,parent,false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

解释:

  View view = LayoutInflater.from(mActivity).inflate(R.layout.item_recommend_model,parent);

当我们翻开inflate源码来看

public View inflate(@LayoutRes int resource, @Nullable ViewGroup root) {
        return inflate(resource, root, root != null);
    }

  // We are supposed to attach all the views we found (int temp)
                    // to root. Do that now.
   if (root != null && attachToRoot) {
         root.addView(temp, params);
    }

1、此时我们的root不是null,底层默认的将attachToRoot设置为true,当attachToRoot的值为true的时候,表示我们将R.layout.item_recommend_model添加到root容器中,如果此时另外一个RecyclerView,也执行了同样的步骤R.layout.item_recommend_model又添加到了另外一个root容器里面此时就会发生崩溃。

2、当我们root不是null且我们将attachToRoot设置为false的时候,表示我们不将resource添加到root中,但是root会协助resource设置布局的参数

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • RecyclerView Item 布局宽高无效问题探究 前言 这个问题很早之前就碰到过,后来通过google找到...
    TinyMen阅读 3,173评论 0 0
  • 在Android开发过程中,可能会遇到各式各样的bug,项目中,使用ViewPager还是很常见的,果然使用中一不...
    Mr_Ashin阅读 9,036评论 0 0
  • GCD简介 GCD全称:Grand Central Dispatch,译为大型的中枢调度器 纯C语言实现,提供了非...
    yanhooIT阅读 12,510评论 1 29
  • 文-阿成 在我们生命中,总有那些要与我们不期而遇的要发生故事的人。我们管这叫缘分。 所谓缘分不是信手拈来,没那么唾...
    阿成_1001阅读 1,355评论 0 0

友情链接更多精彩内容