Android 如何在RecyclerView中实现Admob本机广告?
我试着跟随谷歌的教程,但事情就是不成功。我的RecycleServiceAdapter有错误 错误如下 回收水。(在第9行中注释)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
列表项
。
listItems
包含项目,而不是视图NativeExpressAdViewHolder
应扩展RecycleServiceWholder
holder.getPosition()
是一个位置,而不是adView。无法将其强制转换为NativeExpressAdView
非
列表
有关完整代码和我所遵循的教程,您可以在此处查看我之前关于同一问题的问题()视图持有者用于保存视图。在项目列表中保存视图不是一个好主意(如我所见)。此外,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));
}
}