0

我试着按照谷歌的教程,但事情并没有解决。我在我的RecyclerViewAdapter中有错误。如何在RecyclerView中实施Admob原生广告?

错误如下 RecyclerViewAdapter。 (在第9行注释)

@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)); 
} 

} 
+0

请添加您的实施方法'getItemViewType(位置)'和声明,并初始化为'arrayList' – babay

回答

1
  1. 你不应该查看添加到listItemslistItems包含项目,而不是视图。

  2. NativeExpressAdViewHolder应延伸RecyclerViewHolder

  3. holder.getPosition()是一个位置,而不是一个adView。它不能投射到NativeExpressAdView

  4. 如果您仍然希望在项目列表中保留adViews,您应该更改itemsList的类型,如示例中所述。 private final List<Object> mRecyclerViewItems;

List<app.appname.CardSetterGetter>

+0

全代码,我是继教程,你可以看看我的前面关于同一问题的问题在这里(https://stackoverflow.com/questions/46140421/error-incompatible-types-while-adding-nativeads-in-recyclerview) –

+0

ViewHolders用于保存视图。这是不是很好的主意(如我所见)在项目列表中保存视图。此外,Admob的编码很差,每个AdView都创建了很多线程...但是,是的,您可以在项目列表中保留您的视图... – babay

+0

感谢您的答案,您的第二和第三点帮助我解决了两个问题。请详细说明第三条。如果不在listItems中,我应该在哪里添加视图。 –

相关问题