使用帶有 ItemViewType 的多個 ViewHolders
有時,RecyclerView 需要使用幾種型別的檢視顯示在 UI 中顯示的列表中,並且每個 View 需要一個不同的佈局 xml 才能被充氣。
對於此問題,你可以在單個介面卡中使用不同的 ViewHolders,方法是使用 RecyclerView 中的特殊方法 - getItemViewType(int position)
。
以下是使用兩個 ViewHolders 的示例:
-
用於顯示列表條目的 ViewHolder
-
用於顯示多個標題檢視的 ViewHolder
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(context).inflate(viewType, parent, false); return ViewHolder.create(itemView, viewType); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { final Item model = this.items.get(position); ((ViewHolder) holder).bind(model); } @Override public int getItemViewType(int position) { return inSearchState ? R.layout.item_header : R.layout.item_entry; } abstract class ViewHolder { abstract void bind(Item model); public static ViewHolder create(View v, int viewType) { return viewType == R.layout.item_header ? new HeaderViewHolder(v) :new EntryViewHolder(v); } } static class EntryViewHolder extends ViewHolder { private View v; public EntryViewHolder(View v) { this.v = v; } @Override public void bind(Item model) { // Bind item data to entry view. } } static class HeaderViewHolder extends ViewHolder { private View v; public HeaderViewHolder(View v) { this.v = v; } @Override public void bind(Item model) { // Bind item data to header view. } }