Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用recyclerview实现advance原生广告?_Java_Android_Android Recyclerview - Fatal编程技术网

Java 如何使用recyclerview实现advance原生广告?

Java 如何使用recyclerview实现advance原生广告?,java,android,android-recyclerview,Java,Android,Android Recyclerview,一、 已经在android中实现了recyclerview。现在我正在尝试在android中实现Advance原生广告。为此,我遵循了谷歌代码实验室教程。但我没有成功。下面是我的recyclerview代码。然后是我试图在我的recyclerview中实现AdvanceNative广告的代码 Recyclerview适配器: public class CouponDealsAdapter extends RecyclerView.Adapter<CouponDealsAdapter.Vie

一、 已经在android中实现了recyclerview。现在我正在尝试在android中实现Advance原生广告。为此,我遵循了谷歌代码实验室教程。但我没有成功。下面是我的recyclerview代码。然后是我试图在我的recyclerview中实现AdvanceNative广告的代码

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());
        }
    }
}
根据codelab的教程,带有Add实现的Recyclerview适配器

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);
    }
}
在这段代码中,这一行出现了错误。 返回新的UnifiedNativeLeadViewHolder(unifiedNativeLayoutView)

错误是:不兼容的类型:

必需:com.release.adapter.RecycleServiceAdapter.ViewHolder

找到:com.release.adapter.UnifiedNativeReadViewHolder

另一个错误:

@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)耦合项.get(位置)

错误:不兼容的类型:RecycleServiceAdapter.ViewHolder无法转换为UnifiedNativeReadViewHolder

请帮我纠正这些错误。这是正确的实施方式。或者请告诉我如何编写代码来实现advance native ad

@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: 
@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;