是否可以在我的适配器中创建多视图类型..就像为我的标题添加视图然后在标题下面是一个列表.
我的适配器的代码段:
public class StoreAdapter extends RecyclerView.Adapter{ List mStoreList; public class BindingHolder extends RecyclerView.ViewHolder { private ViewDataBinding binding; public BindingHolder(View v) { super(v); binding = DataBindingUtil.bind(v); } public ViewDataBinding getBinding() { return binding; } } public StoreAdapter(List storeList) { this.mStoreList = storeList; } @Override public BindingHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row_store, parent, false); BindingHolder holder = new BindingHolder(v); return holder; } @Override public void onBindViewHolder(BindingHolder holder, int position) { final Store store = mStoreList.get(position); holder.getBinding().setVariable(BR.store, store); holder.getBinding().executePendingBindings(); } @Override public int getItemCount() { return mStoreList.size(); } }
更多细节:
目前我的适配器仅支持1种视图类型.是否可以使用另一种支持数据绑定的视图类型?
一个ViewHolder中可以使用多个绑定。这是具有两种类型的项目的适配器的示例:
public class MyAdapter extends RecyclerView.Adapter{ private static final int CELL_TYPE_HEADER = 0; private static final int CELL_TYPE_REGULAR_ITEM = 1; class MyViewHolder extends RecyclerView.ViewHolder { private HeaderBinding headerBinding; private RegularItemBinding regularItemBinding; MyViewHolder(HeaderBinding binding) { super(binding.getRoot()); headerBinding = binding; } MyViewHolder(RegularItemBinding binding) { super(binding.getRoot()); regularItemBinding = binding; } } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); ViewDataBinding binding; switch (viewType) { case CELL_TYPE_HEADER: binding = DataBindingUtil.inflate(inflater, R.layout.header, parent, false); return new MyViewHolder((HeaderBinding) binding); case CELL_TYPE_REGULAR_ITEM: binding = DataBindingUtil.inflate(inflater, R.layout.regular_item, parent, false); return new MyViewHolder((RegularItemBinding) binding); } return null; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { MyViewModel viewModel = new MyViewModel(getItem(position)); switch (holder.getItemViewType()) { case CELL_TYPE_HEADER: HeaderBinding headerBinding = holder.headerBinding; viewModel.setSomething(...); headerBinding.setViewModel(viewModel); break; case CELL_TYPE_REGULAR_ITEM: RegularItemBinding regularItemBinding = holder.regularItemBinding; viewModel.setSomething(...); regularItemBinding.setViewModel(viewModel); break; } } @Override public int getItemViewType(int position) { if (position == 0) { return CELL_TYPE_HEADER; } else { return CELL_TYPE_REGULAR_ITEM; } } }