Вставьте Admob в представление ресайклера, когда загружен собственный продвижение admob

В настоящее время я смог вставить admob между моими элементами представления ресайклера и смог загрузить рекламу и элемент представления ресайклера, но моя проблема в том, что представление ресайклера не показывает никаких элементов до тех пор, пока admob загружен.

Итак, как мне вставить или отобразить admobкогда он загружен. Если admob failed to load предметы вторичной переработки также не отображаются.

Другими словами, я хочу показать элемент просмотра ресайклера, и когда admob загружен, он должен вставить промежуточный вид ресайклера (пункт меню).

Адаптер

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private static final int MENU_ITEM_VIEW_TYPE = 0;
    private static final int UNIFIED_NATIVE_AD_VIEW_TYPE = 1;

    private final Context mContext;
    private final ArrayList<Object> videosFolderName;

    public RecyclerViewAdapter(Context context, ArrayList<Object> videosFolderName) {
        this.mContext = context;
        this.videosFolderName = videosFolderName;
    }

    public class VideoAdapterViewHolder extends RecyclerView.ViewHolder{
        public TextView folderName;
        public RelativeLayout folderpath;

        public VideoAdapterViewHolder(@NonNull View itemView) {
            super(itemView);
            folderName = (TextView)itemView.findViewById(R.id.folderName);
            folderpath = (RelativeLayout)itemView.findViewById(R.id.cardFolder);
        }
    }

    @Override
    public int getItemCount() {
        return videosFolderName.size();
    }

    @Override
    public int getItemViewType(int position) {
        Object recyclerViewItem = videosFolderName.get(position);
        if (recyclerViewItem instanceof UnifiedNativeAd) {
            return UNIFIED_NATIVE_AD_VIEW_TYPE;
        }
        return MENU_ITEM_VIEW_TYPE;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        switch (viewType) {
            case UNIFIED_NATIVE_AD_VIEW_TYPE:
                View unifiedNativeLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.small_ads, viewGroup, false);
                return new UnifiedNativeAdViewHolder(unifiedNativeLayoutView);
            case MENU_ITEM_VIEW_TYPE:
            default:
                View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.folder_item, viewGroup, false);
                return new VideoAdapterViewHolder(view);
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        int viewType = getItemViewType(position);
        switch (viewType) {
            case UNIFIED_NATIVE_AD_VIEW_TYPE:
                UnifiedNativeAd nativeAd = (UnifiedNativeAd) videosFolderName.get(position);
                populateNativeAdView(nativeAd, ((UnifiedNativeAdViewHolder) holder).getAdView());
                break;
            case MENU_ITEM_VIEW_TYPE:
            default:
                ((VideoAdapterViewHolder) holder).folderName.setText("" + videosFolderName.get(position));
                ((VideoAdapterViewHolder) holder).folderpath.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        
                    }
                });
        }
    }

    private void populateNativeAdView(UnifiedNativeAd nativeAd, UnifiedNativeAdView adView) {
        ((TextView) adView.getHeadlineView()).setText(nativeAd.getHeadline());
        ((TextView) adView.getBodyView()).setText(nativeAd.getBody());
        ((Button) adView.getCallToActionView()).setText(nativeAd.getCallToAction());

        NativeAd.Image icon = nativeAd.getIcon();

        if (nativeAd.getStarRating() == null) {
            adView.getStarRatingView().setVisibility(View.INVISIBLE);
        } else {
            ((RatingBar) adView.getStarRatingView()).setRating(nativeAd.getStarRating().floatValue());
            adView.getStarRatingView().setVisibility(View.VISIBLE);
        }

        adView.setNativeAd(nativeAd);
    }
}

Основное занятие

public class MainActivity extends AppCompatActivity {

    private ArrayList<VideoViewInfo> AllVideosData = new ArrayList<>();
    private ArrayList<Object> videosFolderName = new ArrayList<>();
    private List<UnifiedNativeAd> mNativeAds = new ArrayList<>();

    public static final int NUMBER_OF_ADS = 1;
    private AdLoader adLoader;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        populateFolders();

        loadNativeAds();

    }

    private void populateFolders() {
        GetVideos gv = new GetVideos();
        gv.getAllVideosData(this, AllVideosData);

        for (int i = 0; i < AllVideosData.size(); i++) {
            int j;
            for (j = 0; j < videosFolderName.size(); j++) {
                if (videosFolderName.get(j).equals(AllVideosData.get(i).getBucketName())) {
                    break;
                }
            }
            if (j == videosFolderName.size()) {
                videosFolderName.add(AllVideosData.get(i).getBucketName());
            }
        }
        String[] bucketName = new String[videosFolderName.size()];
        videosFolderName.toArray(bucketName);
    }

    private void loadNativeAds() {
        AdLoader.Builder builder = new AdLoader.Builder(this, getString(R.string.native_ad_id));
        adLoader = builder.forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
            @Override
            public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
                mNativeAds.add(unifiedNativeAd);
                if (!adLoader.isLoading()) {
                    insertAdsInMenuItems();
                }
            }
        }).withAdListener(new AdListener() {
            @Override
            public void onAdFailedToLoad(int errorCode) {
                if (!adLoader.isLoading()) {
                    insertAdsInMenuItems();
                }
            }
        }).build();
        adLoader.loadAds(new AdRequest.Builder().build(), NUMBER_OF_ADS);
    }

    public ArrayList<Object> getRecyclerViewItems() {
        return videosFolderName;
    }

    private void insertAdsInMenuItems() {
        if (mNativeAds.size() <= 0) {
            return;
        }
        int offset = (videosFolderName.size() / mNativeAds.size()) + 1;
        ///int offset = (12) + 1;
        int index = 3;
        for (UnifiedNativeAd ad : mNativeAds) {
            videosFolderName.add(index, ad);
            index = index + offset;
        }
        loadMenu();
    }

    private void loadMenu() {
        RecyclerView recyclerView = findViewById(R.id.folderRecyclerView);

        GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);

        recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
        RecyclerView.Adapter adapter = new RecyclerViewAdapter(this, videosFolderName);
        recyclerView.setAdapter(adapter);
    }
}

UnifiedNativeAdViewHolder

public class UnifiedNativeAdViewHolder extends RecyclerView.ViewHolder {

    private UnifiedNativeAdView adView;

    public UnifiedNativeAdView getAdView() {
        return adView;
    }

    UnifiedNativeAdViewHolder(View view) {
        super(view);
        adView = (UnifiedNativeAdView) view.findViewById(R.id.ad_view);
        // The MediaView will display a video asset if one is present in the ad, and the
        // first image asset otherwise.
        adView.setMediaView((MediaView) adView.findViewById(R.id.ad_media));
        // Register the view used for each individual asset.
        adView.setHeadlineView(adView.findViewById(R.id.ad_headline));
        adView.setBodyView(adView.findViewById(R.id.ad_body));
        adView.setCallToActionView(adView.findViewById(R.id.ad_call_to_action));
        adView.setIconView(adView.findViewById(R.id.ad_icon));
        adView.setStarRatingView(adView.findViewById(R.id.ad_stars));
    }
}

0 ответов

Другие вопросы по тегам