首頁  >  文章  >  Java  >  如何為 RecyclerView 新增頁首和頁尾而不出現 NullPointerException?

如何為 RecyclerView 新增頁首和頁尾而不出現 NullPointerException?

Patricia Arquette
Patricia Arquette原創
2024-11-17 14:20:02211瀏覽

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

在RecyclerView 實現頁眉和頁腳

問題:

問題:

添加頁眉或頁腳RecyclerView 可能是一個挑戰。提供的程式碼建議使用 addView(View view, intposition) 將視圖新增至 LinearLayoutManager,但此方法不成功並導致 NullPointerException。

解決方案:

新增頁腳
  • 要將頁腳,請依照下列步驟操作:
  • 為頁腳視圖建立一個ViewHolder。
  • 重寫 onCreateViewHolder 以在必要時膨脹頁腳視圖。
  • 重寫 onBindViewHolder 將資料綁定到頁腳視圖。
重寫 getItemCount 將頁尾包含在計數中。

重寫 getItemViewType 以將頁腳與普通清單項目區分開。

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

頁腳適配器範例:

新增頁眉
  • 向 Recyler>向 Recycler新增標頭遵循類似的過程:
  • 為標頭視圖建立 ViewHolder。
  • 重寫 onCreateViewHolder 以在必要時膨脹標頭視圖。
使用 RecyclerView.addHeaderView(View view) 將標題檢視新增至 RecyclerView。

重寫 getItemCount 以將標題包含在計數中。

  • 其他注意:
如果您需要多個頁眉和頁腳,請透過調整getItemViewType 和getItemCount 方法來類似地處理它們。 提供的 GitHub 儲存庫提供了新增這兩個頁首和頁尾的完整實作頁首和頁尾。

以上是如何為 RecyclerView 新增頁首和頁尾而不出現 NullPointerException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn