Для отображения нескольких макетов в одном RecyclerView, вы должны использовать несколько держателей просмотра в классе адаптера вашего повторного просмотра.
Например, для одного представления используется Отображение ваших данных и другое представление используется для показа рекламы Admob / facebook между данными элемента. Так что ваш класс адаптера выглядит следующим образом:
public class StatusImageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList<String> images;
private String path;
private Context context;
OnIteamClickListner listner;
private String status;
private static final int AD_VIEW_HOLDER = 0;
private static final int CONTENT_VIEW_HOLDER = 1;
public StatusImageAdapter(Context context, ArrayList<String> images, String path, OnIteamClickListner listner, String status) {
this.images = images;
this.path = path;
this.context = context;
this.listner = listner;
this.status = status;
}
public interface OnIteamClickListner {
void onIteamClick(View view, String action, int position, String path);
}
@Override
public int getItemViewType(int position) {
if (position % Const.ITEMS_PER_AD == 0 && position>1)
return AD_VIEW_HOLDER;
return CONTENT_VIEW_HOLDER;
}
@Override
public int getItemCount() {
return images.size();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
switch (viewType) {
case AD_VIEW_HOLDER:
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.admob_banner_row_item, parent, false);
return new AdViewHolder(itemView);
case CONTENT_VIEW_HOLDER:
// fall through
default:
View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_item, null);
return new ContentViewHolder(itemLayoutView);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
int viewType = getItemViewType(position);
switch (viewType) {
case AD_VIEW_HOLDER:
AdViewHolder adViewHolder= (AdViewHolder) holder;
adViewHolder.adView.setVisibility(View.GONE);
CommonMethods.loadAd(context,adViewHolder.adView);
break;
case CONTENT_VIEW_HOLDER:
ContentViewHolder contentViewHolder = (ContentViewHolder) holder;
Bitmap bitmap = BitmapFactory.decodeFile( images.get(position));
contentViewHolder.imageView.setImageBitmap(bitmap);
if (status.equals(Const.ONLINE)) {
contentViewHolder.img_download.setBackgroundResource(R.drawable.ic_download_black);
}
if (status.equals(Const.OFLINE)) {
contentViewHolder.img_download.setBackgroundResource(R.drawable.ic_delete);
}
contentViewHolder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listner.onIteamClick(view, "View", position, path);
}
});
contentViewHolder.img_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listner.onIteamClick(view, "QuickView", position, path);
}
});
contentViewHolder.img_download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (status.equals(Const.ONLINE)) {
listner.onIteamClick(view, "Download", position, path);
}
if (status.equals(Const.OFLINE)) {
listner.onIteamClick(view, "Delete", position, path);
}
}
});
contentViewHolder.img_share.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listner.onIteamClick(view, "Share", position, path);
}
});
}
}
private class AdViewHolder extends RecyclerView.ViewHolder {
AdView adView;
public AdViewHolder(View itemView) {
super(itemView);
adView=itemView.findViewById(R.id.adView);
}
}
private class ContentViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
ImageView img_share, img_download, img_view;
public ContentViewHolder(View itemLayoutView) {
super(itemLayoutView);
imageView = itemView.findViewById(R.id.statusItem_imageView);
img_share = itemView.findViewById(R.id.img_share);
img_download = itemView.findViewById(R.id.img_download);
img_view = itemView.findViewById(R.id.img_view);
}
}
}
Позвоните этому адаптеру из файла класса активности.
StatusImageAdapter statusImageAdapter = new StatusImageAdapter(context, imageFiles, hiddenpath.getAbsolutePath(), this, Const.ONLINE);