我已在recyclerview中的项目中实施了广告。我的要求是在不同的位置加载不同的广告,如Facebook或其他Android应用程序节目,但我无法在不同的位置加载不同的广告,同一广告在每个位置加载。
这是我用来加载广告的方法。
public void loadAd(final Context context,
final AppInstallAdViewHolder viewHolder) {
synchronized (mSyncObject) {
if ((mAdLoader != null) && mAdLoader.isLoading()) {
Log.d("MainActivity.LOG_TAG", "AppInstallAdFetcher is already loading an ad.");
return;
}
// If an ad previously loaded, reuse it instead of requesting a new one.
if (viewHolder.mAppInstallAd != null) {
viewHolder.populateView(context,viewHolder.mAppInstallAd);
return;
}
NativeAppInstallAd.OnAppInstallAdLoadedListener appInstallAdListener =
new NativeAppInstallAd.OnAppInstallAdLoadedListener() {
public void onAppInstallAdLoaded(NativeAppInstallAd ad) {
viewHolder.mAppInstallAd = ad;
viewHolder.populateView(context,viewHolder.mAppInstallAd);
}
};
if (mAdLoader == null) {
mAdLoader = new AdLoader.Builder(context, ConstantVariables.NATIVE_AD_UNIT_ID)
.forAppInstallAd(appInstallAdListener)
.withAdListener(new AdListener() {
@Override
public void onAdFailedToLoad(int errorCode) {
mViewHolder.hideView();
}
}).build();
}
mAdLoader.loadAd(new PublisherAdRequest.Builder()
.build());
}
}
非常感谢先进!!!
答案 0 :(得分:2)
不要这样做。
如果您在同一个ID的单个页面上放置多个广告,那么您的admob帐户将被禁止。您可以通过创建多个广告ID来实现。但为此,您需要创建大量广告ID才能在RecyclerView
中显示。
下的官方文档单个屏幕上的广告数量不应超过一个
答案 1 :(得分:0)
首先,重写getItemViewType方法:
@Override
public int getItemViewType(int position) {
int id_of_your_type;
//Implement your logic here
return id_of_your_type;
}
然后,您只需使用onCreateViewHolder的第二个参数,并在您的观看次数和广告之间切换: 你应该为每个视图创建一个持有者。
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View v=null;
RecyclerView.ViewHolder holder = null;
switch(viewType){
case TYPE_Ad1:
v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.layout1, viewGroup, false);
holder = new TYPE_Ad1_Holder();
break;
case TYPE_2:
v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.layout2, viewGroup, false);
holder = new Type2_Holder();
break;
case TYPE_Ad2:
v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.layout3, viewGroup, false);
holder = new TYPE_Ad2_Holder();
break;
}
return holder;
}