You do not have to create another Adapter, you just have to implement getItemViewType()
to define your different types of views:
@Override
public int getItemViewType(int position) {
switch(position) {
case 0:
return TIPO_A;
case 1:
return TIPO_B;
case 2:
return TIPO_C;
default:
return TIPO_A;
}
}
Create your ViewHolder:
public class ViewHolderA extends RecyclerView.ViewHolder {
TextView mTitle;
TextView mContent;
public GroupViewHolder(View itemView) {
super (itemView);
...
}
}
public class ViewHolderB extends RecyclerView.ViewHolder {
ImageView mImage;
public ImageViewHolder(View itemView) {
super (itemView);
...
}
}
public class ViewHolderC extends RecyclerView.ViewHolder {
ImageView mImage;
public ImageViewHolder(View itemView) {
super (itemView);
...
}
}
In onCreateViewHolder()
we return the type of ViewHolder
(Container):
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case TIPO_A: return new ViewHolderA(...);
case TIPO_B: return new ViewHolderB(...);
case TIPO_C: return new ViewHolderC(...);
...
}
}
In bindViewHolder()
we link the type of view to recycle:
@Override
public void bindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (getItemViewType(position)) {
case TIPO_A:
ViewHolderA viewHolderA = (ViewHolderFirst)holder;
...
break;
case TIPO_B:
ViewHolderB viewHolderB = (ViewHolderSecond)holder;
...
break;
case TIPO_C:
ViewHolderC viewHolderC = (ViewHolderSecond)holder;
...
break;
...
}
So you could have different types of views with different characteristics in a single Adapter
: