在带有Firestore数据库的RecyclerView分页中显示广告

时间:2019-06-13 17:33:07

标签: android firebase android-recyclerview pagination

我正在与支持与Firestore数据库分页的RecyclerView一起使用。我想将10个项目显示为recylcerview a Ads,请尝试多次尝试,不成功,请帮我找到正确的代码。

这是我的分页代码。

     //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);
        }

1 个答案:

答案 0 :(得分:0)

这是如何结合自定义适配器模型广告使用多种类型 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) {

        }
    }
}