如何在回收器中的特定位置添加Admob查看PagedListAdapter?



我正在尝试在RecyclerView(PagedListAdapter(中的特定位置显示Admob横幅广告。通过我目前的实现,我可以将视图(包含广告(添加到特定位置,但它用 AdView 替换了实际的 ViewHolder。

问题在于getItemCountgetItemViewType,我无法提供逻辑。

谁能展示如何做到这一点?

我正在发布一个简单的案例示例。

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

任何帮助将不胜感激。谢谢。

有点晚了,但是当我看到那篇帖子时,其他人可能会这样做。

这可能有助于您:

public static final int ADS_AFTER = 10;
@Override
public int getItemCount() {
int s = super.getItemCount();
int t  = s + (s / ADS_AFTER);
if(s>0) t++; // +1 when list is not empty
Log.e("☺☺☺ total is "+t+", real are "+s);
return t;
}

对于您遇到的唯一问题是getItemCount((,因为我认为super.getItemCount();返回消息数,但您希望显示每 10 个项目添加一次,因此总大小是消息数加上显示的广告数。

你应该尝试这样的事情

@Override
public int getItemCount() {
return super.getItemCount() //Number of messages 
+ ((int) super.getItemCount() / 10) + 1 ; // Number of ads displayed the plus 1 is for the first element which will be an Ad
}

最新更新