Rumah  >  Artikel  >  Java  >  Bagaimanakah anda menambah pengepala dan pengaki pada RecyclerView tanpa mendapat NullPointerException?

Bagaimanakah anda menambah pengepala dan pengaki pada RecyclerView tanpa mendapat NullPointerException?

Patricia Arquette
Patricia Arquetteasal
2024-11-17 14:20:02211semak imbas

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

Melaksanakan Pengepala dan Pengaki dalam RecyclerView

Masalah:

Menambahkan pengepala atau pengaki pada RecyclerView boleh menjadi satu cabaran. Kod yang disediakan mencadangkan menambah paparan pada LinearLayoutManager menggunakan addView(View view, int position), tetapi pendekatan ini tidak berjaya dan menghasilkan NullPointerException.

Penyelesaian:

Menambah Pengaki

Untuk menambah pengaki pada RecyclerView, ikuti langkah berikut:

  • Buat ViewHolder untuk paparan footer.
  • Timpa onCreateViewHolder untuk mengembang paparan footer apabila perlu.
  • Timpa onBindViewHolder untuk mengikat data ke paparan pengaki.
  • Timpa getItemCount untuk memasukkan pengaki dalam kiraan.
  • Timpa getItemViewType untuk membezakan pengaki daripada item senarai biasa.

Contoh Penyesuai Pengaki:

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

Menambah a Pengepala

Menambah pengepala pada RecyclerView mengikut proses yang serupa:

  • Buat ViewHolder untuk paparan pengepala.
  • Timpa onCreateViewHolder untuk mengembang pengepala lihat apabila perlu.
  • Tambahkan paparan pengepala pada RecyclerView menggunakan RecyclerView.addHeaderView(View view).
  • Timpa getItemCount untuk memasukkan pengepala dalam kiraan.

Nota Tambahan:

  • Jika anda memerlukan berbilang pengepala dan pengaki, kendalikannya dengan cara yang sama dengan melaraskan kaedah getItemViewType dan getItemCount.
  • Repositori GitHub yang disediakan menawarkan pelaksanaan lengkap untuk menambah kedua-dua pengepala dan pengaki.

Atas ialah kandungan terperinci Bagaimanakah anda menambah pengepala dan pengaki pada RecyclerView tanpa mendapat NullPointerException?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn