Я реализовал код для показа рекламы после каждых 3 элементов, но первый элемент отображается после 4 элементов, остальные работают хорошо.
Ниже приведен код, который я пытался добиться этого.
Я хочу показывать рекламу после каждых 3-х элементов.
Я взял две постоянные переменные для управления
private class AdsAdapter extends RecyclerView.Adapter<AdsAdapter.Holder> {
List<Ads> list;
List<String> stringList;
private static final int AD_TYPE = 2;
private static final int CONTENT_TYPE = 1;
public AdsAdapter(List<Ads> list, List<String> stringList) {
this.list = list;
this.stringList = stringList;
}
@Override
public int getItemViewType(int position) {
if (position>1 && position % 4 == 0) {
return AD_TYPE;
}
return CONTENT_TYPE;
}
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
Log.e("TYPE", viewType + "");
View listItem;
Holder viewHolder = null;
switch (viewType) {
case AD_TYPE:
listItem =
layoutInflater.inflate(R.layout.list_item1, parent,
false);
viewHolder = new Holder(listItem);
break;
case CONTENT_TYPE:
listItem =
layoutInflater.inflate(R.layout.list_item, parent,
false);
viewHolder = new Holder(listItem);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull Holder holder, int
position) {
int viewType=getItemViewType(position);
switch (viewType)
{
case AD_TYPE:
holder.imageView.setVisibility(View.VISIBLE);
break;
case CONTENT_TYPE:
holder.textView.setVisibility(View.VISIBLE);
holder.textView.setText(stringList.get(position));
break;
}
}
@Override
public int getItemCount() {
return stringList.size();
}
public class Holder extends RecyclerView.ViewHolder {
TextView textView;
ImageView imageView;
public Holder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.tv_string);
imageView = itemView.findViewById(R.id.iv);
}
}
}
некоторые из ваших элементов в stringList не будут видны, так как вы упомянули общее количество элементов как размер списка строк и не манипулировали списком




В adapter позиция начинается с 0, поэтому вам нужно сделать position+1
@Override
public int getItemViewType(int position) {
if (position>1 && (position+1) % 4 == 0) {
return AD_TYPE;
}
return CONTENT_TYPE;
}
Должно быть
%3, так как позиция начинается с индекса 0