#java #android #android-recyclerview
#java #Android #android-recyclerview
Вопрос:
Я внедрил код для показа рекламы после каждых 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 amp;amp; 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);
}
}
}
Комментарии:
1. Это должно быть
%3
так, как позиция начинается с индекса 02. некоторые из ваших элементов в StringList будут недоступны для просмотра, поскольку вы указали общее количество элементов в качестве размера stringlist и не манипулировали списком
Ответ №1:
В adapter
позиции начинается с 0, поэтому вам нужно сделать position 1
@Override
public int getItemViewType(int position) {
if (position>1 amp;amp; (position 1) % 4 == 0) {
return AD_TYPE;
}
return CONTENT_TYPE;
}