Maison > Java > javaDidacticiel > le corps du texte

Comment ajouter un en-tête et un pied de page à un RecyclerView sans obtenir une NullPointerException ?

Patricia Arquette
Libérer: 2024-11-17 14:20:02
original
219 Les gens l'ont consulté

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

Implémentation des en-têtes et des pieds de page dans RecyclerView

Problème :

Ajout d'un en-tête ou d'un pied de page à un RecyclerView peut être un défi. Le code fourni suggère d'ajouter une vue au LinearLayoutManager à l'aide de addView (View view, int position), mais cette approche n'a pas abouti et a entraîné une NullPointerException.

Solution :

Ajout d'un pied de page

Pour ajouter un pied de page à une RecyclerView, suivez ces étapes :

  • Créez un ViewHolder pour la vue de pied de page.
  • Remplacez onCreateViewHolder pour gonfler la vue du pied de page si nécessaire.
  • Remplacez onBindViewHolder pour lier les données à la vue du pied de page.
  • Remplacez getItemCount pour inclure le pied de page dans le décompte.
  • Remplacez getItemViewType pour distinguer le pied de page des éléments de liste normaux.

Exemple d'adaptateur de pied de page :

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);
        }
    }
}
Copier après la connexion

Ajout d'un en-tête

L'ajout d'un en-tête à un RecyclerView suit un processus similaire :

  • Créez un ViewHolder pour la vue d'en-tête.
  • Remplacez onCreateViewHolder pour gonfler la vue d'en-tête si nécessaire.
  • Ajoutez la vue d'en-tête à RecyclerView à l'aide de RecyclerView.addHeaderView (Vue d'affichage).
  • Remplacez getItemCount pour inclure l'en-tête dans le décompte.

Supplémentaire Notes :

  • Si vous avez besoin de plusieurs en-têtes et pieds de page, gérez-les de la même manière en ajustant les méthodes getItemViewType et getItemCount.
  • Le référentiel GitHub fourni offre une implémentation complète de l'ajout des deux en-têtes et pieds de page.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal