Sie benötigen zwei verschiedene Layouts und zwei diffrent Ansicht Halter, und in Ihrem Adapter tun Sie Folgendes:
1 - Umsetzung der getItemViewType()
Methode und Rückgabetyp eine andere Ansicht bei Bedarf (basierend auf Position zum Beispiel). Sie können Konstanten wie private static final int VIEW_HEADER = 1;
definieren, um es
2 zu erleichtern - In Ihrem onCreateViewHolder()
, basierend auf dem viewType
Parameter, geben Sie den ViewHolder Sie
benötigen
3 - In Ihrem onBindViewHolder()
Kontrolle der getItemViewType()
Ihrer ViewHolder
, warf es zu die richtige Art und Ihre
Bindung implementieren
Hier ein Beispiel:
public class HeaderAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final static int VIEW_HEADER = 0;
private final static int VIEW_ITEM = 1;
private Context context;
public HeaderAdapter(Context context) {
this.context = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
if (viewType == VIEW_HEADER) {
// Inflate header layout
view = LayoutInflater.from(context).inflate(R.layout.elem_header, parent, false);
return new HeaderHolder(view);
}
// Inflate item layout
view = LayoutInflater.from(context).inflate(R.layout.elem_item, parent, false);
return new ItemHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (getItemViewType(position) == VIEW_HEADER){
// Do some header stuff
HeaderHolder headerHolder = (HeaderHolder) holder;
return;
}
// Do some item stuff
ItemHolder itemHolder = (ItemHolder) holder;
}
@Override
public int getItemCount() {
// Do some crazy calcuation to return the number of items you will display (headers + items)
return 0;
}
@Override
public int getItemViewType(int position) {
// Return the type depending on your logic, could use a modulo or even check some list you've passed
return position == 0 ? VIEW_HEADER : VIEW_ITEM;
}
private class ItemHolder extends RecyclerView.ViewHolder {
ItemHolder(View itemView) {
super(itemView);
}
}
private class HeaderHolder extends RecyclerView.ViewHolder {
HeaderHolder(View itemView) {
super(itemView);
}
}
}