如何在recylerview android中的不同位置加载不同的广告

时间:2016-03-01 11:16:50

标签: android admob android-recyclerview

我已在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());
    }
}

非常感谢先进!!!

2 个答案:

答案 0 :(得分:2)

不要这样做。

如果您在同一个ID的单个页面上放置多个广告,那么您的admob帐户将被禁止。

您可以通过创建多个广告ID来实现。但为此,您需要创建大量广告ID才能在RecyclerView中显示。

  

单个屏幕上的广告数量不应超过一个

结帐Ad Placement

下的官方文档

答案 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;
    }