1

I used this code to put ads within recyclerview. My issue is that the ads items replace the items of my regular layout. For example if I have a list of 10 items, I'll get the item 5 and the item 9 replaced from adview.

@Override
    public int getItemViewType(int position) {
        if (position % 5 == 3)
            return AD_TYPE;
        return CONTENT_TYPE;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        AdView adview;
        ViewHolder holder;

       if (viewType == AD_TYPE) {
            adview = new AdView(mContext);
            adview.setAdSize(AdSize.BANNER);
            adview.setAdUnitId(mContext.getString(R.string.banner_ad_unit_id));

            float density = mContext.getResources().getDisplayMetrics().density;
            int height = Math.round(AdSize.BANNER.getHeight() * density);
            AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, height);
            adview.setLayoutParams(params);

            AdRequest request = new AdRequest.Builder().build();
            adview.loadAd(request);
            holder = new ViewHolder(adview);

        } else{
            View view = inflater.inflate(R.layout.scores_list_item, parent, false);
            holder = new ViewHolder(view);
      }

        return holder;
    }

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

        if(position % 5 != 3)  {
            cursor.moveToPosition(position);
            holder.home_name.setText(Utilies.getAdjustedTeamName(cursor.getString(COL_HOME)));
                holder.away_name.setText(Utilies.getAdjustedTeamName(cursor.getString(COL_AWAY)));

    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView home_name;
        public TextView away_name;

        public ViewHolder(View view) {
            super(view);
            if (!(itemView instanceof AdView)) {

                home_name = (TextView) view.findViewById(R.id.home_name);
                away_name = (TextView) view.findViewById(R.id.away_name);

                view.setOnClickListener(this);
            }
        }
Domenico Maiuri
  • 191
  • 1
  • 1
  • 10

1 Answers1

1

In your ArrayList, add null values at whatever positions you want adview.

    for(int i=0;i<arr.size();i++){
       if(i%5==0)
       {
         alist.add(null);
       }
       alist.add(arr.get(i));
    }

Then in getItemViewType(),

  @Override
public int getItemViewType(int position) {
   if(qlist.get(position)==null)
       return AD_TYPE;
   return CONTENT_TYPE;
}

This will do the work.

n1m1
  • 869
  • 1
  • 9
  • 20