使用数据绑定的多视图类型Android recyclerview适配器
是否可以在我的适配器中创建多视图类型。。就像为我的标题添加视图一样,标题下面是一个列表 我的适配器的代码段:使用数据绑定的多视图类型Android recyclerview适配器,android,android-studio,android-recyclerview,android-adapter,android-databinding,Android,Android Studio,Android Recyclerview,Android Adapter,Android Databinding,是否可以在我的适配器中创建多视图类型。。就像为我的标题添加视图一样,标题下面是一个列表 我的适配器的代码段: public class StoreAdapter extends RecyclerView.Adapter<StoreAdapter.BindingHolder> { List<Store> mStoreList; public class BindingHolder extends RecyclerView
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();
}
}
公共类StoreAdapter扩展了RecyclerView.Adapter{
列出MSStoreList;
公共类BindingHolder扩展了RecyclerView.ViewHolder{
私有视图数据绑定;
公共绑定持有者(视图v){
超级(五);
binding=DataBindingUtil.bind(v);
}
公共视图数据绑定getBinding(){
返回绑定;
}
}
公共存储适配器(列表存储列表){
this.mStoreList=存储列表;
}
@凌驾
public BindingHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.item\u row\u store,parent,false);
BindingHolder=新的BindingHolder(v);
报税表持有人;
}
@凌驾
BindViewHolder上的公共无效(BindingHolder,int位置){
最终存储=mStoreList.get(位置);
holder.getBinding().setVariable(BR.store,store);
holder.getBinding().executePendingBindings();
}
@凌驾
public int getItemCount(){
返回mstorelest.size();
}
}
更多详情:
当前我的适配器仅支持1种视图类型。是否可以添加另一种也支持数据绑定的视图类型?可以在一个ViewHolder中使用多个绑定。 下面是一个适配器示例,其中包含两种类型的项:
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;
}
}
}
公共类MyAdapter扩展了RecyclerView.Adapter{
私有静态最终整数单元格类型标头=0;
私有静态最终整数单元格类型规则项=1;
类MyViewHolder扩展了RecyclerView.ViewHolder{
私人头像绑定头像绑定;
私人正则约束正则约束;
MyViewHolder(磁头绑定){
super(binding.getRoot());
头绑定=绑定;
}
MyViewHolder(正则绑定){
super(binding.getRoot());
正则化绑定=绑定;
}
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
LayoutInflater充气器=LayoutInflater.from(parent.getContext());
视图数据绑定;
开关(视图类型){
案例单元类型标题:
绑定=数据绑定直到充气(充气器,右布局标题,父项,false);
返回新的MyViewHolder((标题绑定)绑定);
案例单元类型常规项目:
绑定=数据绑定直到充气(充气器,R.layout.regular\u项目,父项,false);
返回新的MyViewHolder((RegulationBinding)绑定);
}
返回null;
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,int位置){
MyViewModel viewModel=新的MyViewModel(getItem(position));
开关(holder.getItemViewType()){
案例单元类型标题:
磁头绑定磁头绑定=保持架。磁头绑定;
viewModel.setSomething(…);
headerBinding.setViewModel(viewModel);
打破
案例单元类型常规项目:
RegulationMBinding RegulationMBinding=holder.RegulationMBinding;
viewModel.setSomething(…);
regulationMBinding.setViewModel(viewModel);
打破
}
}
@凌驾
public int getItemViewType(int位置){
如果(位置==0){
返回单元格类型标题;
}否则{
返回单元格\类型\常规\项目;
}
}
}
这个问题已经在其他几个地方得到了回答。是的。。但是我没有看到任何关于数据绑定的帖子,可能是伟大的复制品!如何从ViewHolder获取绑定实例,该实例不是空的?@MohsinFalak您可以为绑定引用提供getter或将其公开。问题是,我有多个绑定(对于消息列表,一个是右向的,另一个是左向的,没有其他区别)对于同一个ViewHolder,我想访问ViewHolder外部的活动绑定,我该怎么做?能否为您的案例添加一段(简化的)代码?请查看以下内容: