Я пытаюсь показывать рекламные баннеры Admob в определенной позиции в RecyclerView, который представляет собой PagedListAdapter. С моей текущей реализацией я могу добавить виды (которые содержат рекламу) к определенной позиции, но он заменяет фактический ViewHolder на AdView.
Проблема с getItemCount
и getItemViewType
, где я не могу предоставить логику.
Может кто-нибудь показать, как это можно сделать?
Я публикую простой пример кейса.
public class MessageAdapter extends PagedListAdapter<Message, RecyclerView.ViewHolder> {
private static final int ITEM_VIEW = R.layout.list_message;
private static final int AD_VIEW = R.layout.list_ad;
public MessageAdapter() {
super(Message.DIFF_UTIL);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view;
switch (viewType) {
case ITEM_VIEW:
view = inflater.inflate(ITEM_VIEW, parent, false);
return new MessageViewHolder(view, mListener);
case AD_VIEW:
view = inflater.inflate(AD_VIEW, parent, false);
return new AdViewHolder(view);
default:
throw new IllegalArgumentException("Unknown Holder type");
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
switch (getItemViewType(position)) {
case ITEM_VIEW:
Message message = getItem(position);
((MessageViewHolder) holder).bindTo(message.getId(), message.getTitle());
break;
case AD_VIEW:
break;
}
}
@Override
public int getItemViewType(int position) {
return (position % 10 == 0) ? AD_VIEW : ITEM_VIEW;
}
@Override
public int getItemCount() {
return super.getItemCount();
}
static class AdViewHolder extends RecyclerView.ViewHolder {
private AdView mAdView;
AdViewHolder(View itemView) {
super(itemView);
// mAdView = itemView.findViewById(R.id.adView);
// AdRequest adRequest = new AdRequest.Builder().build();
// mAdView.loadAd(adRequest);
}
}
}
Любая помощь будет оценена. Спасибо.