【问题标题】:how to place ads in between recyclerview如何在recyclerview之间放置广告
【发布时间】:2016-11-25 07:38:39
【问题描述】:

我需要在 recyclerview 之间放置广告,我尝试了一种效果很好并且广告加载的方法,但问题是广告在列表视图上重叠。任何人请帮助我提前谢谢你

下面是 Adapter.class 的代码

    public class NewsAdapter extends RecyclerView.Adapter<ViewHolder> {

    private static final int CONTENT_TYPE = 0;
    private static final int AD_TYPE = 1;
    private int[] viewTypes;
    int Holderid;
    private List<Newslist> newslists;
    private Context context;


    public NewsAdapter(List<Newslist> newslists, Context context) {
        super();
        //Getting all the news updates
        this.newslists = newslists;
        this.context=context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //Inflate the layout, initialize the View Holder
        ViewHolder holder = null;
        if (viewType == CONTENT_TYPE) {
            View newsView = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_list, parent, false);
            holder=new ItemViewHolder(newsView);
        } else {
            View adView = LayoutInflater.from(parent.getContext()).inflate(R.layout.native_ads, parent, false);
            holder=new AdViewHolder(adView);
        }
        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int position) {
        if (position % 6 == 3) {
            AdViewHolder holder = (AdViewHolder) viewHolder;
            //Load the Ad
            AdRequest request = new AdRequest.Builder()
                    .build();
            holder.adView.loadAd(request);

        } else  {

            ItemViewHolder holder = (ItemViewHolder) viewHolder;
            Newslist newslist = newslists.get(holder.getAdapterPosition());

            holder.message.setText(newslist.getMessage());

            //Image loading using singleton class
            ImageLoader imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
            holder.imageView.setImageUrl(newslist.getImageurl(), imageLoader);
            holder.imageView.setDrawingCacheBackgroundColor(R.mipmap.ic_launcher);
            holder.time.setText(newslist.getTime());
        }
    }

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

    @Override
    public int getItemViewType(int position) {
        if (position % 6 ==3)
            return AD_TYPE;
        return CONTENT_TYPE;
    }
    // return newslists.get(position).getViewType();
}

class ViewHolder extends RecyclerView.ViewHolder {
    ViewHolder(View v) {
        super(v);
    }
}

class ItemViewHolder extends ViewHolder {

    TextView message;
    NetworkImageView imageView;
    TextView time;
    RelativeLayout relativeLayout;

    ItemViewHolder(View itemView) {
        super(itemView);
        message = (TextView) itemView.findViewById(R.id.headline);
        time = (TextView) itemView.findViewById(R.id.time);
        imageView = (NetworkImageView) itemView.findViewById(R.id.networkImageView2);
        relativeLayout = (RelativeLayout) itemView.findViewById(R.id.relativeLayout);
    }
}

class AdViewHolder extends ViewHolder {
    NativeExpressAdView adView;

    AdViewHolder(View v) {
        super(v);
        adView = (NativeExpressAdView) v.findViewById(R.id.nativeAdView);
    }
    }

【问题讨论】:

标签: android listview admob android-recyclerview


【解决方案1】:
    public class NewsAdapter extends RecyclerView.Adapter<ViewHolder> {

        private static final int CONTENT_TYPE = 0;
        private static final int AD_TYPE = 1;
        private int[] viewTypes;
        int Holderid;
        private List<Newslist> newslists;
        private Context context;


        public NewsAdapter(List<Newslist> newslists, Context context) {
            super();
            //Getting all the news updates
            this.newslists = newslists;
            this.context=context;
        }

        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            //Inflate the layout, initialize the View Holder
            ViewHolder holder = null;
            if (viewType == CONTENT_TYPE) {
                View newsView = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_list, parent, false);
                holder=new ItemViewHolder(newsView);
            } else if(viewType == AD_TYPE){
                View adView = LayoutInflater.from(parent.getContext()).inflate(R.layout.native_ads, parent, false);
                holder=new AdViewHolder(adView);
            }
            return holder;
        }

        @Override
        public void onBindViewHolder(final NewsAdapter.ItemViewHolder holder, final int position) {

         if(holder.HOLDER == 1){

            }else {
               final int pos=position-Math.round(position / 6);

                 final Newslist objnewslist=newslists.get(pos);

                holder.message.setText(objnewslist.getMessage());

                //Image loading using singleton class
                ImageLoader imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
                holder.imageView.setImageUrl(objnewslist.getImageurl(), imageLoader);
                holder.imageView.setDrawingCacheBackgroundColor(R.mipmap.ic_launcher);
                holder.time.setText(objnewslist.getTime());
            }
        }

        @Override
        public int getItemCount() {
        int size = newslists.size();
    if(newslists.size() > 0) {
        return newslists.size() + Math.round(newslists.size()/6);
    }
            return newslists.size();
        }

        @Override
        public int getItemViewType(int position) {
           if ((position+1)%6==0){
                return AD_TYPE;
            }
            return CONTENT_TYPE;
        }
        // return newslists.get(position).getViewType();
    }


    class ItemViewHolder extends RecyclerView.ViewHolder {

        TextView message;
        NetworkImageView imageView;
        TextView time;
        RelativeLayout relativeLayout;
        int HOLDER;
        AdView madview;

        ItemViewHolder(View itemView , int viewType) {
            super(itemView);
            if (viewType == AD_TYPE) {
                    madview = (AdView) itemView.findViewById(R.id.adView);
                    AdRequest adreq = new AdRequest.Builder().build();
                    madview.loadAd(adreq);
                    HOLDER = AD_TYPE;
                }else {
            message = (TextView) itemView.findViewById(R.id.headline);
            time = (TextView) itemView.findViewById(R.id.time);
            imageView = (NetworkImageView) itemView.findViewById(R.id.networkImageView2);
            relativeLayout = (RelativeLayout) itemView.findViewById(R.id.relativeLayout);
HOLDER = CONTENT_TYPE;
            }
        }
    }

检查上面的代码,它工作正常。

【讨论】:

  • 如果您找到相关的答案,请勾选答案。
【解决方案2】:

当你调用ItemViewHolder时,你应该输入viewType的值,getItemCount()应该返回newslists.size() + Math.round(newslists.size()/(6 - 1)强>);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多