Per ottenere ciò che desideri, è necessario eseguire l'override di getItemViewType(position)
su RecyclerView.Adapter
, dove viene restituito un int
che indica quale tipo di visualizzazione verrà utilizzato per rappresentare questa posizione.
In seguito creerai diversi ViewHolders
su createViewHolder (parent,viewType)
che manterranno i riferimenti a ciascun CardLayout distinto nel tuo caso.
Quindi su bindViewHolder(holder, position)
è possibile creare un'istruzione switch o in caso contrario passare attraverso l'elenco di possibili visualizzazioni e riempirle di dati.
codice di esempio riportato di seguito:
public GeneralViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
GeneralViewHolder holder;
View v;
Context context = viewGroup.getContext();
if (viewType == FIRST_TYPE) {
v = LayoutInflater.from(context)
.inflate(R.layout.first_card, viewGroup, false);
holder = new FirstTypeViewHolder(v); //Of type GeneralViewHolder
} else {
v = LayoutInflater.from(context)
.inflate(R.layout.second_card, viewGroup, false);
holder = new SecondTypeViewHolder(v);
}
return holder;
}
public void onBindViewHolder(GeneralViewHolder viewHolder, int i) {
if(getItemViewType(i)==FIRST_TYPE) {
FirstTypeViewHolder holder1 = (FirstTypeViewHolder)viewHolder;
} else {
SecondTypeViewHolder holder1 = (SecondTypeViewHolder)viewHolder;
}
}
public int getItemViewType (int position) {
//Some logic to know which type will come next;
return Math.random()<0.5 ? FIRST_TYPE : SECOND_TYPE;
}
https://developer.android.com/training/material/lists-cards.html. E per i diversi layout basta cambiare il ViewType sul tuo adattatore –
@PedroOliveira Ho già letto che, ma mostra solo come è fatto con una carta, e non diversi. – safari
Devi sovrascrivere 'getItemViewType' sull'adattatore e restituire un diverso tipo di vista in modo da poter gonfiare layout diversi sul tuo' onCreateViewHolder' (che riceve il tipo di vista come parametro 2º) –