【问题标题】:Showing ads in RecyclerView paging with Firestore database使用 Firestore 数据库在 RecyclerView 分页中显示广告
【发布时间】:2019-10-28 08:42:16
【问题描述】:

我正在使用支持 Firestore 数据库分页的 RecyclerView。我想显示 10 个项目 recyclerview 一个广告,我尝试了几次都没有成功,请帮助我找到正确的代码。

这是我的分页代码。

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

【问题讨论】:

    标签: android firebase android-recyclerview pagination


    【解决方案1】:

    这是一个完整示例,说明如何将 multi type recyclerviewcustom adapterModelAds 一起使用强>类型 对于分页问题,​​您必须在外部适配器类处理它可以更容易。

    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) {
    
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 2021-12-22
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多