Adapter (RecyclerView)

Der Adapter und ViewHolder liegen in der selben Datei. Diese Klassen arbeiten zusammen um die Daten anzuzeigen. Dabei ist der ViewHolder ein Wrapper der das Layout der einzelnen Elemente definiert. Der Adapter befüllt diesen mit Werten und erstellt pro Item ein ViewHolder.
Dafür müssen von der Klasse RecyclerView.Adapter<YourAdapter.YourViewHolder> folgende Methoden überschrieben werden:

  • onCreateViewHolder(): Diese Methode wird aufgerufen wenn ein neues ViewHolder-Objekt benötigt wird. Sie erzeugt ein solches Objekt, befüllt diese aber noch nicht mit Daten.
  • onBindViewHolder(): Diese Methode befüllt die ViewHolder dann mit den Daten
  • getItemCount(): Der RecyclerView verwendet diese Methode um die Größe der Daten zu ermitteln.

Beispiel:

import android.view.LayoutInflater;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.TextView;  
import androidx.annotation.NonNull;  
import androidx.recyclerview.widget.RecyclerView;  
  
import java.util.List;
 
public class ArticleListAdapter extends RecyclerView.Adapter<ArticleListAdapter.ArticleItem>{ 
    private final int articleItemLayout;
    private List<Article> articles;
    
    public ArticleListAdapter(int layoutId){  
        articleItemLayout = layoutId;  
    }  
  
    public void setArticleList(List<Article> articles){
	    this.articles = articles;  
        notifyDataSetChanged();  
    }  
  
    @Override  
    public int getItemCount(){  
        return articles == null ? 0 : articles.size();  
    }  
  
    @NonNull  
    @Override
    public ArticleItem onCreateViewHolder(ViewGroup parent, int viewType){  
        View view = LayoutInflater.from(parent.getContext()).inflate(articleItemLayout, parent, false);  
        return new ArticleItem(view);  
    }  
  
    @Override  
    public void onBindViewHolder(final ArticleItem item, final int listPosition){  
        Article article = articles.get(listPosition);  
        item.name.setText(article.getName());  
        item.quantity.setText("Anzahl: " + String.valueOf(article.getQuantity()));  
    }  
  
    static class ArticleItem extends RecyclerView.ViewHolder{  
        TextView name;  
        TextView quantity;  
  
        ArticleItem(View itemView){  
            super(itemView);  
            name = itemView.findViewById(R.id.articleItemName);  
            quantity = itemView.findViewById(R.id.articleItemQuantity);  
        }  
    }  
}