为什么原生高级广告从回收者视图android中删除了该商品?

问题描述

我正在适配器中使用此代码

How to place Admob Native Advanced Ads in recycler view android?

发生此问题

enter image description here

但是我想要这样的结果

enter image description here

除了我的代码外,我正在使用此公式将商品放置在“回收者”视图中。

    @Override
public int getItemViewType(int position) {
    if (position!=0 && position%4 == 0) {

        return AD_TYPE;
    }
        return CONTENT_TYPE;

}

@Override
public int getItemCount() {
    return mlistItems.size();
}

完整的适配器代码

public class Centeradapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private RecyclerItemClickListener listener;
private List<list_item_center> mlistItems;
private Context mcontext;
private static final int AD_TYPE = 2;
private static final int CONTENT_TYPE = 1;

public Centeradapter(List<list_item_center> listItems,Context context,RecyclerItemClickListener listener) {
    mlistItems = listItems;
    mcontext = context;
    this.listener = listener;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder,int position) {
}

@Override
public int getItemViewType(int position) {
    if (position != 0 && position % 4 == 0) {
        return AD_TYPE;
    }
    return CONTENT_TYPE;

}

@Override
public int getItemCount() {
    return mlistItems.size();
}

}

解决方法

由于getItemCount(),您仍在返回相同的ArrayList的大小。这就是为什么该项目被广告layoutType覆盖的原因。 更好的方法是在条件为position!=0 && position%4 == 0的情况下,事先将广告项插入列表中。

这样,您不必管理或计算onBindViewHolder中列表中的项目位置。另外,您不必计算itemCount内的getItemCount()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...