Android 如何在RecyclerView中实现Admob本机广告?

Android 如何在RecyclerView中实现Admob本机广告?,android,admob,android-recyclerview,google-admob,Android,Admob,Android Recyclerview,Google Admob,我试着跟随谷歌的教程,但事情就是不成功。我的RecycleServiceAdapter有错误 错误如下 回收水。(在第9行中注释) 您不应将视图添加到列表项。 listItems包含项目,而不是视图 NativeExpressAdViewHolder应扩展RecycleServiceWholder holder.getPosition()是一个位置,而不是adView。无法将其强制转换为NativeExpressAdView 若您仍然希望在items列表中保留adViews,那个么应该更改ite

我试着跟随谷歌的教程,但事情就是不成功。我的RecycleServiceAdapter有错误

错误如下 回收水。(在第9行中注释)

  • 您不应将视图添加到
    列表项
    listItems
    包含项目,而不是视图

  • NativeExpressAdViewHolder
    应扩展
    RecycleServiceWholder

  • holder.getPosition()
    是一个位置,而不是adView。无法将其强制转换为
    NativeExpressAdView

  • 若您仍然希望在items列表中保留adViews,那个么应该更改itemsList的类型,如示例中所述<代码>私有最终列表MRECYCLerviceItems


  • 列表

    有关完整代码和我所遵循的教程,您可以在此处查看我之前关于同一问题的问题()视图持有者用于保存视图。在项目列表中保存视图不是一个好主意(如我所见)。此外,Admob的编码非常糟糕,每个AdView都会创建很多线程。。。但是,是的,您可以将视图保留在项目列表中…感谢您的回答,您的第二点和第三点帮助我解决了两个问题。。请详细说明第三个问题。如果不在listItems中,我应该在哪里添加视图。items列表面临相同的问题。我应该在片段中向您展示更多的代码吗?我最终创建了一个单音AdKeeper对象,用于保存、加载和重新加载广告。ViewHodler在onBindViewHolder()中从该keeper获取一个AdView。然后在不需要时释放。这真是一辆自行车。请添加方法
    getItemViewType(position)
    的实现以及
    arrayList的声明和初始化
    
    @Override
    public void onBindViewHolder(final RecyclerViewHolder holder, final int position) {
    
    int viewType = getItemViewType(position);
    
    switch (viewType){
    
        case AD_VIEW_TYPE:
            NativeExpressAdViewHolder nativeExpressHolder = (NativeExpressAdViewHolder)holder;
            NativeExpressAdView adView = (NativeExpressAdView)arrayList.get(Position); //Inconvertible types; cannot cast 'app.modals.cardSetterGetter' to 'com.google.android.gms.ads.NativeExpressAdView
    
            ViewGroup adCardView = (ViewGroup)nativeExpressHolder.itemView;
            adCardView.removeAllViews();
    
            if(adView.getParent() != null){
                ((ViewGroup)adView.getParent()).removeView(adView);
            }
    
            adCardView.addView(adView);
            break;
    
        case MENU_ITEM_VIEW_TYPE:
    
        default:
            String card_image;
            CardSetterGetter cardSetterGetter;
            cardSetterGetter = arrayList.get(position);
    
            card_image = constants.SERVERIP.concat(cardSetterGetter.getImageurl());
            holder.cardSetterGetter = cardSetterGetter;
            holder.title.setText(cardSetterGetter.getImagetitle()); //set title
    
            cardSetterGetter.getTag();
    
            PointF focusPoint = new PointF(0.5f, 0f);
            // your app populates the focus point
    
            holder.image // set image
                    .getHierarchy()
                    .setActualImageFocusPoint(focusPoint);
            holder.image.setImageURI(Uri.parse(card_image));
    }
    
    }