Как реализовать предварительную нативную рекламу с переработчиком просмотров? - PullRequest
1 голос
/ 28 января 2020

Я реализовал утилиту просмотра в android. сейчас я пытаюсь внедрить Advance Native Ad в android. для этого я следовал учебнику Google Codelabs. Ссылка на учебник . Но я не добился успеха. Ниже мой код повторного просмотра. и после этого код, который я пытался внедрить Advance Native Ad в моем обзоре переработчика.

Адаптер Recyclerview:

public class CouponDealsAdapter extends RecyclerView.Adapter<CouponDealsAdapter.ViewHolder> {

    public List<CouponDeal> couponDeals;
    public Context context;

    public CouponDealsAdapter(Context context, List<CouponDeal> couponDeals) {

        this.couponDeals = couponDeals;
        this.context = context;

    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        public TextView store_name;


        View mView;


        public ViewHolder(View itemView) {
            super(itemView);
            mView = itemView;

            store_name = (TextView) mView.findViewById(R.id.couponDeals_storeName);
        }
    }

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

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.coupons_deal, parent, false);
        final ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {

        if (TextUtils.isEmpty(couponDeals.get(position).getStore_name())) {
            holder.store_name.setText("Not Available");
        } else {
            holder.store_name.setText(couponDeals.get(position).getStore_name());
        }
    }
}

UnifiedNativeAdViewHolder:

publi c класс 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.setPriceView(adView.findViewById(R.id.ad_price));
    adView.setStarRatingView(adView.findViewById(R.id.ad_stars));
    adView.setStoreView(adView.findViewById(R.id.ad_store));
    adView.setAdvertiserView(adView.findViewById(R.id.ad_advertiser));
}

Адаптер Recyclerview с реализацией Add согласно учебному пособию codelab.

public class CouponDealsAdapter extends RecyclerView.Adapter<CouponDealsAdapter.ViewHolder> {

    private static final int MENU_ITEM_VIEW_TYPE = 0;
    private static final int UNIFIED_NATIVE_AD_VIEW_TYPE = 1;

    public List<CouponDeal> couponDeals;
    public Context context;

    public CouponDealsAdapter(Context context, List<CouponDeal> couponDeals) {

        this.couponDeals = couponDeals;
        this.context = context;

    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        public TextView store_name;

        View mView;


        public ViewHolder(View itemView) {
            super(itemView);
            mView = itemView;

            store_name = (TextView) mView.findViewById(R.id.couponDeals_storeName);

        }
    }

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

    @Override
    public int getItemViewType(int position) {

        Object recyclerViewItem = couponDeals.get(position);
        if (recyclerViewItem instanceof UnifiedNativeAd) {
            return UNIFIED_NATIVE_AD_VIEW_TYPE;
        }
        return MENU_ITEM_VIEW_TYPE;
    }



    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        switch (viewType) {
            case UNIFIED_NATIVE_AD_VIEW_TYPE:
                View unifiedNativeLayoutView = LayoutInflater.from(
                        parent.getContext()).inflate(R.layout.ad_unified,
                        parent, false);
                return new UnifiedNativeAdViewHolder(unifiedNativeLayoutView);
            case MENU_ITEM_VIEW_TYPE:

            default:
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.coupons_deal, parent, false);
                return new ViewHolder(view);
        }
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {

        int viewType = getItemViewType(position);
        switch (viewType) {
            case UNIFIED_NATIVE_AD_VIEW_TYPE:
                UnifiedNativeAd nativeAd = (UnifiedNativeAd) couponDeals.get(position);
                populateNativeAdView(nativeAd, ((UnifiedNativeAdViewHolder) holder).getAdView());
                break;
            case MENU_ITEM_VIEW_TYPE:
                // fall through
            default:

                if (TextUtils.isEmpty(couponDeals.get(position).getStore_name())) {
                    holder.store_name.setText("Not Available");
                } else {
                    holder.store_name.setText(couponDeals.get(position).getStore_name());
                }

        }

    }

    private void populateNativeAdView(UnifiedNativeAd nativeAd,
                                      UnifiedNativeAdView adView) {
        // Some assets are guaranteed to be in every UnifiedNativeAd.
        ((TextView) adView.getHeadlineView()).setText(nativeAd.getHeadline());
        ((TextView) adView.getBodyView()).setText(nativeAd.getBody());
        ((Button) adView.getCallToActionView()).setText(nativeAd.getCallToAction());

        // These assets aren't guaranteed to be in every UnifiedNativeAd, so it's important to
        // check before trying to display them.
        NativeAd.Image icon = nativeAd.getIcon();

        if (icon == null) {
            adView.getIconView().setVisibility(View.INVISIBLE);
        } else {
            ((ImageView) adView.getIconView()).setImageDrawable(icon.getDrawable());
            adView.getIconView().setVisibility(View.VISIBLE);
        }

        if (nativeAd.getPrice() == null) {
            adView.getPriceView().setVisibility(View.INVISIBLE);
        } else {
            adView.getPriceView().setVisibility(View.VISIBLE);
            ((TextView) adView.getPriceView()).setText(nativeAd.getPrice());
        }

        if (nativeAd.getStore() == null) {
            adView.getStoreView().setVisibility(View.INVISIBLE);
        } else {
            adView.getStoreView().setVisibility(View.VISIBLE);
            ((TextView) adView.getStoreView()).setText(nativeAd.getStore());
        }

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

        if (nativeAd.getAdvertiser() == null) {
            adView.getAdvertiserView().setVisibility(View.INVISIBLE);
        } else {
            ((TextView) adView.getAdvertiserView()).setText(nativeAd.getAdvertiser());
            adView.getAdvertiserView().setVisibility(View.VISIBLE);
        }

        // Assign native ad object to the native view.
        adView.setNativeAd(nativeAd);
    }
}

Я не знаю, является ли это правильным способом его реализации или нет , Я просто следую учебнику по Codelabs. Я также получаю некоторые ошибки. Упоминается ниже ..

@Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        switch (viewType) {
            case UNIFIED_NATIVE_AD_VIEW_TYPE:
                View unifiedNativeLayoutView = LayoutInflater.from(
                        parent.getContext()).inflate(R.layout.ad_unified,
                        parent, false);
                return new UnifiedNativeAdViewHolder(unifiedNativeLayoutView);
            case MENU_ITEM_VIEW_TYPE: 

В этом фрагменте кода я получаю сообщение об ошибке в этой строке. вернуть новый UnifiedNativeAdViewHolder (unifiedNativeLayoutView);

Ошибка: Несовместимые типы:

Обязательно: com.release.adapter.RecyclerViewAdapter.ViewHolder

Найдено: com.release.adapter. UnifiedNativeAdViewHolder

Другая ошибка:

@Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {

        int viewType = getItemViewType(position);
        switch (viewType) {
            case UNIFIED_NATIVE_AD_VIEW_TYPE:
                UnifiedNativeAd nativeAd = (UnifiedNativeAd) couponDeals.get(position);
                populateNativeAdView(nativeAd, ((UnifiedNativeAdViewHolder) holder).getAdView());
                break;

Я получаю сообщение об ошибке в этой строке. UnifiedNativeAd nativeAd = (UnifiedNativeAd) couponDeals.get (position);

ошибка: несовместимые типы: RecyclerViewAdapter.ViewHolder не может быть преобразован в UnifiedNativeAdViewHolder

Пожалуйста, помогите мне с этими ошибками. и это правильный способ реализации. Или, пожалуйста, скажите написать код для реализации предварительной нативной рекламы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...