简体   繁体   English

使用Firestore数据库在RecyclerView分页中显示广告

[英]Showing ads in RecyclerView paging with Firestore database

I am working with RecyclerView which support pagination with Firestore database.I want to showing into 10 items recylcerview an Ads,i try serveral times without succes,help me please to find the right code. 我正在使用RecyclerView支持与Firestore数据库的分页。我想显示10个项目recylcerview一个广告,我尝试几次没有成功,请帮我找到正确的代码。

Here is my code of pagination. 这是我的分页代码。

     //Initialize FirebasePagingOptions
    DatabasePagingOptions<Pubs> options = new DatabasePagingOptions.Builder<Pubs>()
            .setLifecycleOwner(this)
            .setQuery(mDatabase, config, Pubs.class)
            .build();
    //Initialize Adapter
    mAdapter = new FirebaseRecyclerPagingAdapter<Pubs, PubsViewHolder>(options) {
        @Override
        public int getItemViewType(int position)
        {
            if (position % 5 == 0)
                return AD_TYPE;
            return CONTENT_TYPE;
        }
        @NonNull
        @Override
        public PubsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return new PubsViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_pub, parent, false));
        }

        @Override
        protected void onBindViewHolder(@NonNull PubsViewHolder holder,
                                        int position,
                                        @NonNull Pubs model) {
            holder.setItem(model);
        }

this is a full example to how to use multi type recyclerview with custom adapter with Model and Ads Type and for paging issue you have to handle it outside adapter class it can be more easier. 这是如何使用带有模型广告类型的自定义适配器的 多类型 recyclerview的完整示例,对于分页问题,​​您必须适配器类之外处理它,它可以更容易。

public class SiteAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<SiteModel> dataList;
    private Context context;

    private static final int AD_TYPE = 1;
    private static final int CONTENT_TYPE = 2;

    public SiteAdapter(Context context) {
        this.context = context;
        dataList = new ArrayList<>();
    }

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



    public List<SiteModel> getDataList() {
        return dataList;
    }



    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View v = null;

        RecyclerView.ViewHolder vh = null;
        if (viewType == AD_TYPE) {
            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.ad_view_item, parent, false);
            vh = new AdViewHolder(v);

        } else {
            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.site_list_item, parent, false);
            vh = new SitesViewHolder(v);
        }
        return vh;
    }

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

        holder.setIsRecyclable(false);

        if (getItemViewType(position) == CONTENT_TYPE) {

        } else {
            AdViewHolder adViewHolder = (AdViewHolder) holder;
            AdRequest request = new AdRequest.Builder().build();
            adViewHolder.adView.loadAd(request);
        }
    }


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

    public void add(SiteModel siteModel, int i) {
        dataList.add(siteModel);
        notifyItemInserted(i);
    }

    public void add(List<SiteModel> moreData) {
        dataList.addAll(moreData);
        notifyDataSetChanged();
    }


    public void updateItem(String desc, boolean isFavourites, int adapterPosition) {
        dataList.get(adapterPosition).setDesc(desc);
        notifyItemChanged(adapterPosition);
    }


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




        public SitesViewHolder(View itemView) {
            super(itemView);


        }

        @Override
        public void onClick(View v) {
            if (clickListener != null) {
                switch (v.getId()) {


            }
        }
    }



    private class AdViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        AdView adView;

        public AdViewHolder(View itemView) {
            super(itemView);
            adView = itemView.findViewById(R.id.adView);
        }

        @Override
        public void onClick(View v) {

        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM