Is it possible to create a multiple view type in my adapter.. like adding a view for my header then below the header is a list.
code snippet of my adapter :
public class StoreAdapter extends RecyclerView.Adapter<StoreAdapter.BindingHolder> {
List<Store> 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<Store> 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();
}
}
more details:
currently my adapter only supports 1 view type. Will it be possible to add another view type that can support databinding as well?
It is possible to use several bindings in one ViewHolder. Here is an example of the adapter with 2 types of items:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
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;
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With