Heim >Java >javaLernprogramm >Wie fügt man einer RecyclerView eine Kopf- und Fußzeile hinzu, ohne eine NullPointerException zu erhalten?

Wie fügt man einer RecyclerView eine Kopf- und Fußzeile hinzu, ohne eine NullPointerException zu erhalten?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-17 14:20:02295Durchsuche

How do you add a header and footer to a RecyclerView without getting a NullPointerException?

Kopf- und Fußzeilen in RecyclerView implementieren

Problem:

Hinzufügen einer Kopf- oder Fußzeile zu Ein RecyclerView kann eine Herausforderung sein. Der bereitgestellte Code schlägt vor, mithilfe von addView(View view, int position) eine Ansicht zum LinearLayoutManager hinzuzufügen. Dieser Ansatz war jedoch nicht erfolgreich und führte zu einer NullPointerException.

Lösung:

Hinzufügen einer Fußzeile

Um einer RecyclerView eine Fußzeile hinzuzufügen, befolgen Sie diese Schritte:

  • Erstellen Sie einen ViewHolder für die Fußzeilenansicht.
  • Überschreiben Sie onCreateViewHolder, um die Fußzeilenansicht bei Bedarf zu vergrößern.
  • Überschreiben Sie onBindViewHolder, um Daten an die Fußzeilenansicht zu binden .
  • Überschreiben Sie getItemCount, um die Fußzeile in das einzuschließen count.
  • getItemViewType überschreiben, um die Fußzeile von den normalen Listenelementen zu unterscheiden.

Beispiel für einen Fußzeilenadapter:

public class FooterViewHolder extends RecyclerView.ViewHolder {
    public FooterViewHolder(View itemView) {
        super(itemView);
    }
}

public class RecyclerViewWithFooterAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private static final int FOOTER_VIEW = 1;
    private List<String> data;

    @Override
    public int getItemCount() {
        return data == null ? 0 : data.size() + 1;
    }

    @Override
    public int getItemViewType(int position) {
        return position == data.size() ? FOOTER_VIEW : super.getItemViewType(position);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v;
        if (viewType == FOOTER_VIEW) {
            v = LayoutInflater.from(context).inflate(R.layout.list_item_footer, parent, false);
            return new FooterViewHolder(v);
        }
        v = LayoutInflater.from(context).inflate(R.layout.list_item_normal, parent, false);
        return new NormalViewHolder(v);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof FooterViewHolder) {
            FooterViewHolder vh = (FooterViewHolder) holder;
        } else {
            NormalViewHolder vh = (NormalViewHolder) holder;
            vh.bindView(position);
        }
    }
}

Hinzufügen eines Headers

Das Hinzufügen eines Headers zu einer RecyclerView folgt a ähnlicher Prozess:

  • Erstellen Sie einen ViewHolder für die Header-Ansicht.
  • Überschreiben Sie onCreateViewHolder, um die Header-Ansicht bei Bedarf zu vergrößern.
  • Fügen Sie die Header-Ansicht zur RecyclerView hinzu mit RecyclerView.addHeaderView(Ansichtsansicht).
  • Überschreiben Sie getItemCount, um die einzuschließen header in der Zählung.

Zusätzliche Hinweise:

  • Wenn Sie mehrere Kopf- und Fußzeilen benötigen, behandeln Sie diese auf ähnliche Weise, indem Sie die Methoden getItemViewType und getItemCount anpassen .
  • Das bereitgestellte GitHub-Repository bietet eine vollständige Implementierung des Hinzufügens von Headern und Fußzeilen.

Das obige ist der detaillierte Inhalt vonWie fügt man einer RecyclerView eine Kopf- und Fußzeile hinzu, ohne eine NullPointerException zu erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn