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

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
327 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!

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