[英]show ads after every 3 item in recyclerview
I have implemented the code to show ads after every 3 item but first item it show after 4 items rest working good 我已经实现了代码,以便在每3个项目之后展示广告,但是在4个项目之后显示的第一个项目仍然正常工作
Below is the code I have tried to achieve this. 下面是我试图实现此目的的代码。
I want to show ad after every 3 items. 我想在每3个项目后显示广告。
I have taken two constant variable to manage 我有两个常量变量来管理
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);
}
}
}
In adapter
position starts from 0 so you have to do position+1
在
adapter
位置从0开始,所以你必须做position+1
@Override
public int getItemViewType(int position) {
if (position>1 && (position+1) % 4 == 0) {
return AD_TYPE;
}
return CONTENT_TYPE;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.