Android 将多个 ViewHolders 与 ItemViewType 一起使用

例子

有时一个 RecyclerView 会需要使用几种类型的 View 来显示在 UI 显示的列表中,每个 View 都需要不同的布局 xml 来膨胀。

对于这个问题,您可以在单个 Adapter 中使用不同的 ViewHolders,通过使用 RecyclerView - 中的特殊方法getItemViewType(int position)。

下面是使用两个 ViewHolder 的示例:

  1. 用于显示列表条目的 ViewHolder

  2. 用于显示多个标题视图的 ViewHolder

    @Override
    publicRecyclerView.ViewHolderonCreateViewHolder(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) {
           // 将项目数据绑定到条目视图。
       }
    }
    static class HeaderViewHolder extends ViewHolder {
       private View v;
       public HeaderViewHolder(View v) {
          this.v= v;
       }
       @Override public void bind(Item model) {
           // 将项目数据绑定到标题视图。
       }
    }