alibaba / vlayout

Project vlayout is a powerfull LayoutManager extension for RecyclerView, it provides a group of layouts for RecyclerView. Make it able to handle a complicate situation when grid, list and other layouts in the same recyclerview.
http://tangram.pingguohe.net/
MIT License
10.8k stars 1.79k forks source link

适配器动态添加广告视图报错,麻烦看下是适配器 #508

Open qinchangbiao opened 4 years ago

qinchangbiao commented 4 years ago

VirtualLayoutManager: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. at android.view.ViewGroup.addViewInner(ViewGroup.java:5104) at android.view.ViewGroup.addView(ViewGroup.java:4929) at android.view.ViewGroup.addView(ViewGroup.java:4869) at android.view.ViewGroup.addView(ViewGroup.java:4842) at zy.ads.engine.adapter.XSubContentAdapter.onBindViewHolder(XSubContentAdapter.java:100) at zy.ads.engine.adapter.XSubContentAdapter.onBindViewHolder(XSubContentAdapter.java:33)

int type = getItemViewType(position);
    Log.e(TAG, "onBindViewHolder: position>>>>>" + +position + ", " + contentBeans.get(position).getTtne() + ", type:" + type);
    switch (type) {
        case TYPE_NEW://普通处理
            GlideUtils.loadImage(mContext, contentBeans.get(position).getThumbnail(), holder.imageView, R.mipmap.item_back);
            holder.name.setText(contentBeans.get(position).getTitle());
            holder.oldprice.setText(contentBeans.get(position).getReadNum() + "次阅读");
            holder.newprice.setText(String.valueOf(contentBeans.get(position).getPublishDate()));
            holder.frameLayout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(mContext, WedHItemDivActivity.class);
                    intent.putExtra(AppConstants.Item_id, contentBeans.get(position).getId());
                    mContext.startActivity(intent);
                }
            });
            break;
        case TYPE_AD:// 广告处理
            View expressAdView = contentBeans.get(position).getTtne().getExpressAdView();
            **holder.flRoot.removeAllViews();
            holder.flRoot.addView(expressAdView);//XSubContentAdapter.java:100**
            break;