1- Erstellen einer Klasse, die BaseViewHolder
RecyclerView.ViewHolder
2- Neues enum
genannt ViewType
verlängern:
public enum ViewType {
POST, IMAGE, VIDEO
}
3- erstellen ViewModel
Klasse, die die Daten wie folgt halten wird:
public class ViewModel {
ViewType viewType;
Object value;
pubic ViewType getViewType() {
return viewType;
}
public Object getValue() {
return value;
}
public void setViewType(ViewType viewType) {
this.viewType = viewType;
}
public void setValue(Object value) {
this.value = value;
}
}
4- Ihr RecyclerView-Adapter enthält einen BaseViewHolder:
public class MyAdapter extends RecyclerView.Adapter<BaseViewHolder> {
public BaseViewHolder onCreateViewHolder(...) {
ViewModel viewModel = new ViewModel();
switch(cardType) {
case 1:
viewModel.setViewType(ViewType.POST);
break;
case 2:
viewModel.setViewType(ViewType.POST);
break;
}
return BaseViewHolder.createView(viewModel);
}
}
5- Die BaseViewHolder Klasse:
public class BaseViewHolder extends RecyclerView.ViewHolder {
public BaseViewHolder(View itemView) {
super(itemView);
}
public static BaseViewHolder createViewHolder(ViewModel model) {
View itemView;
switch(model.getViewType()) {
case POST:
itemView = LayoutInflater.from(getContext()).inflate(R.layout.post_layout);
return new PostLayoutViewHolder(itemView, model);
case IMAGE:
itemView = LayoutInflater.from(getContext()).inflate(R.layout.image_layout);
return new ImageLayoutViewHolder(itemView, model);
}
}
}
6- Für jeden Ansichtstyp, erhalten Sie eine ViewHolder Klasse erstellen, die BaseViewHolder erstreckt.
Sie sollten eine Reihe von Generika passieren und auf der Instanz von jeder je Objekt sollten Sie geben das entsprechende Layout/Logik – Ricardo
In diesem Fall wir erstellt beim Aufruf des Adapters verschiedene Modellklassen für die unterschiedliche Layoutstruktur und übergibt den Modellklassennamen und prüft dies mit "instanceOf", um das aktuelle Modell in diesem Layout zu identifizieren. –
Wie eine Arraylist Objekte an Adapter übergeben und sie später werfen? – user6650650