【问题标题】:How to add Native Ads in between my data items?如何在我的数据项之间添加原生广告?
【发布时间】:2016-12-26 04:28:36
【问题描述】:

我创建了一个带有自定义适配器的回收站视图,我想在我的商品的每个第三个位置显示原生广告。但无论我写什么,它都会与我的项目重叠,最重要的是,会显示原生广告。但我不想要这个。

public class Event_Discover_Combined_Adapter extends RecyclerView.Adapter<Event_Discover_Combined_Adapter.MyViewHolder> {

private Context context;
private ArrayList<Event_Discover_Combined_Details> beanList;
private int itemCount;

public Event_Discover_Combined_Adapter(Context context, ArrayList<Event_Discover_Combined_Details> beanList, int itemCount) {
    this.context = context;
    this.beanList = beanList;
    this.imageLoader = ImageLoader.getInstance();
    this.itemCount = itemCount;

}

//int viewType ;
@Override
public int getItemViewType(int position) {
    if (position % 3 == 0) {
        return R.layout.native_ad_frame_layout;
    } else {
        if (beanList.get(position).getType() == ConstantUrl.TYPE_EVENT) {
            return R.layout.events_item;
        } else {
            return R.layout.discover_item;
        }
    }
}

@Override
public Event_Discover_Combined_Adapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(context).inflate(viewType, parent, false);
    return new MyViewHolder(itemView);
}



public static ImageLoader imageLoader;

@Override
public void onBindViewHolder(final Event_Discover_Combined_Adapter.MyViewHolder holder, int position) {
    Event_Discover_Combined_Details bean = beanList.get(position);

    if (position % 3 == 0) {
        //Ad View
        //For Native Ads
        AdLoader.Builder builder = new AdLoader.Builder(context, context.getResources().getString(R.string.ADMOB_AD_UNIT_ID));

        //if (requestContentAds) {
        builder.forContentAd(new NativeContentAd.OnContentAdLoadedListener() {
            @Override
            public void onContentAdLoaded(NativeContentAd ad) {
                NativeContentAdView adView = (NativeContentAdView) getLayoutInflater()
                        .inflate(R.layout.native_ad_content, null);
                populateContentAdView(ad, adView);
                holder.frameLayout.removeAllViews();
                holder.frameLayout.addView(adView);
            }
        });
        //}

        AdLoader adLoader = builder.withAdListener(new AdListener() {
            @Override
            public void onAdFailedToLoad(int errorCode) {
                Toast.makeText(context, "Failed to load native ad: "
                        + errorCode, Toast.LENGTH_SHORT).show();
            }
        }).build();
        adLoader.loadAd(new AdRequest.Builder().build());

    } else {
        //Normal View
        AppLog.Log("combine", "beanlist" + bean.getType());

        if (bean.getType() == ConstantUrl.TYPE_DISCOVER) {
            if (!bean.getDiscoverDetails().getIcon().equals(""))
                imageLoader.displayImage(bean.getDiscoverDetails().getIcon(),
                        holder.iv_discover_icon);

            holder.tv_author_name.setText(bean.getDiscoverDetails().getAuthor());
            holder.item_discover_descrip.setText(bean.getDiscoverDetails().getDescription());
            holder.tv_discover_heading.setText(bean.getDiscoverDetails().getTitle());

        } else if (bean.getType() == ConstantUrl.TYPE_EVENT) {
            if (!bean.getEventDetails().getIcon().equals(""))
                imageLoader.displayImage(bean.getEventDetails().getIcon(),
                        holder.event_icon);

  /*  holder.item_event_date.setText(bean.getStartDate());
    holder.item_event_time.setText(bean.getStartDate());*/
            try {
                Date date1 = AppUtils.getFormatedDate(bean.getEventDetails().getStartDate());

                String event_time = (String) android.text.format.DateFormat.format("EEEE", date1) + " " + context.getString(R.string.at_text) + " " + new SimpleDateFormat("hh:mm aa").format(date1);

                // holder.item_event_date.setText((String) android.text.format.DateFormat.format("dd", date1));

                holder.item_event_date.setText(event_time);
                holder.item_event_time.setText(event_time);


            } catch (Exception e) {
                e.printStackTrace();
            }

            holder.item_event_heading.setText(bean.getEventDetails().getName());
            holder.item_event_descrip.setText(bean.getEventDetails().getDescription());

        }

    }

}

@Override
public int getItemCount() {
    return itemCount;
}

// int count = 0;

public void setItemCount(int count) {

    this.itemCount = count;

}

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    //For Discover
    public ImageView iv_discover_icon;
    MyTextView tv_author_name;
    MyTextView item_discover_descrip;
    MyTextView_medium tv_discover_heading;

    //For Events
    public ImageView event_icon;
    public MyTextView_medium item_event_time;
    MyTextView item_event_date;
    MyTextView item_event_descrip;
    MyTextView_medium item_event_heading;

    //For Native Ads
    FrameLayout frameLayout;

    public MyViewHolder(final View itemView) {
        super(itemView);

        //For Discover
        iv_discover_icon = (ImageView) itemView.findViewById(R.id.iv_discover_icon);
        tv_author_name = (MyTextView) itemView.findViewById(R.id.tv_author_name);
        tv_discover_heading = (MyTextView_medium) itemView.findViewById(R.id.tv_discover_heading);
        item_discover_descrip = (MyTextView) itemView.findViewById(R.id.item_discover_descrip);
        itemView.setOnClickListener(this);

        //For Events
        event_icon = (ImageView) itemView.findViewById(R.id.event_icon);
        item_event_date = (MyTextView) itemView.findViewById(R.id.item_event_date);
        item_event_time = (MyTextView_medium) itemView.findViewById(R.id.item_event_time);
        item_event_heading = (MyTextView_medium) itemView.findViewById(R.id.item_event_heading);
        item_event_descrip = (MyTextView) itemView.findViewById(R.id.item_event_descrip);
        itemView.setOnClickListener(this);

        //For Native Ads
        frameLayout = (FrameLayout) itemView.findViewById(R.id.fl_adplaceholder);

    }

    @Override
    public void onClick(View v) {
        if ((beanList.get(getAdapterPosition()).getType()) == ConstantUrl.TYPE_EVENT) {
            Intent i = new Intent(context, Events.class);
            i.putExtra("event_details", beanList.get(getAdapterPosition()).getEventDetails());
            context.startActivity(i);
        } else {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(beanList.get(getAdapterPosition()).getDiscoverDetails().getUrl()));
            context.startActivity(intent);
        }
    }
}

private LayoutInflater getLayoutInflater() {
    AppLog.Log("classmate5", "inside_getLayoutInflater" + LayoutInflater.from(context));
    return LayoutInflater.from(context);
}

private void populateContentAdView(NativeContentAd nativeContentAd,
                                   NativeContentAdView adView) {
    AppLog.Log("classmate5", "inside_populateContentAdView");

    adView.setHeadlineView(adView.findViewById(R.id.contentad_headline));
    adView.setImageView(adView.findViewById(R.id.contentad_image));
    adView.setBodyView(adView.findViewById(R.id.contentad_body));
    //adView.setCallToActionView(adView.findViewById(R.id.contentad_call_to_action));
    //adView.setLogoView(adView.findViewById(R.id.contentad_logo));
    //adView.setAdvertiserView(adView.findViewById(R.id.contentad_advertiser));

    // Some assets are guaranteed to be in every NativeContentAd.
    ((MyTextView_medium) adView.getHeadlineView()).setText(nativeContentAd.getHeadline());
    ((MyTextView) adView.getBodyView()).setText(nativeContentAd.getBody());
    //((TextView) adView.getCallToActionView()).setText(nativeContentAd.getCallToAction());
    //((TextView) adView.getAdvertiserView()).setText(nativeContentAd.getAdvertiser());

    List<NativeAd.Image> images = nativeContentAd.getImages();

    if (images.size() > 0) {
        ((ImageView) adView.getImageView()).setImageDrawable(images.get(0).getDrawable());
    }
    // Some aren't guaranteed, however, and should be checked.
    //NativeAd.Image logoImage = nativeContentAd.getLogo();

    /*if (logoImage == null) {
        //adView.getLogoView().setVisibility(View.INVISIBLE);
    } else {
        ((ImageView) adView.getLogoView()).setImageDrawable(logoImage.getDrawable());
        //adView.getLogoView().setVisibility(View.VISIBLE);
    }*/

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

}

我想知道在哪里添加检查以隐藏和取消隐藏项目。假设我有 6 个项目。因此,在 recyclerview 中,它应该显示 9 个项目,包括原生广告。 (每第三个位置)。

【问题讨论】:

    标签: android arraylist android-arrayadapter android-recyclerview


    【解决方案1】:
     if (position == 0 || (position + 1) % 3 == 0) { //add your nativeAdd here }
    

    【讨论】:

    • 我做到了,但它与我的原始项目重叠
    • 我不想重叠我的原始项目。 @Gnanendra Kumar
    • 删除 onBindViewHolder 方法中的视图。访问父视图组并使用 holder.viewGroup.removeAllViews();
    • 嗨 Gnanendra - 您需要通过添加一些上下文、一些解释以及原始代码来改进您的答案。如果您解释您的代码如何提供解决方案,这对原始提问者和任何其他寻求类似问题解决方案的读者都有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    相关资源
    最近更新 更多