有时一个 RecyclerView 会需要使用几种类型的 View 来显示在 UI 显示的列表中,每个 View 都需要不同的布局 xml 来膨胀。
对于这个问题,您可以在单个 Adapter 中使用不同的 ViewHolders,通过使用 RecyclerView - 中的特殊方法getItemViewType(int position)。
下面是使用两个 ViewHolder 的示例:
用于显示列表条目的 ViewHolder
用于显示多个标题视图的 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) {
// 将项目数据绑定到标题视图。
}
}