我正在尝试在RecyclerView(即PagedListAdapter)的特定位置展示Admob标语广告。在我当前的实现中,我能够将视图(包含广告)添加到特定位置,但是它将实际的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);
}
}
}
任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
对于您唯一的问题是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
}
答案 1 :(得分:0)
有点晚了,但是当我看到那个帖子时,其他人很有可能会这么做。
这可以帮助您:
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;
}