2017-04-08 2 views
0

RecyclerView verbessern Element der Liste zu finden, aber ich will some wie das tun:Zusätzliche Elemente in recyclerView

enter image description here

Wie Sie sehen können, da habe ich einfach Artikelliste, aber ich mag Gruppe in ein paar Elemente und markieren Sie sie per Kopfzeile.

Kopf- und Positionsliste sind verschiedene Klassen (haben andere Daten innerhalb)

So , wie man hinzufügen zwei verschiedene Layouts (mit unterschiedlichen Daten) in recyclerView?

Antwort

1

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); 
     } 
    } 
} 
Verwandte Themen