Отображение рекламы в пейджинге RecyclerView с базой данных Firestore - PullRequest
0 голосов
/ 13 июня 2019

Я работаю с RecyclerView, который поддерживает разбиение на страницы с базой данных Firestore. Я хочу показать в 10 элементах recylcerview рекламу, пробую несколько раз безуспешно, помогите, пожалуйста, найти правильный код.

Вот мой код нумерации страниц.

     //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 голосов
/ 13 июня 2019

это полный пример того, как использовать мульти тип 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) {

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...