0

アイテムの3番目の位置にネイティブ広告を表示するカスタムアダプターを使用してリサイクラービューを作成しました。しかし、私が書いたものは、そのアイテムが重なっていて、その上にネイティブ広告が表示されています。しかし、私はこれを望んでいません。データ項目間にネイティブ広告を追加するにはどうすればよいですか?

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項目を表示する必要があります。 (3位ごと)。

答えて

0
if (position == 0 || (position + 1) % 3 == 0) { //add your nativeAdd here } 
+0

私はそれをしましたが、私の元のアイテムが重複しています –

+0

私は元のアイテムを重複したくありません。 @Gnanendra Kumar –

+0

は、onBindViewHolderメソッドのビューを削除します。親ビューグループにアクセスして、holder.viewGroup.removeAllViews()を使用します。 –

関連する問題