gpt4 book ai didi

使用数据绑定(bind)的具有多个 View 类型的 Android recyclerview 适配器

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:18 26 4
gpt4 key购买 nike

是否可以在我的适配器中创建一个多 View 类型...比如为我的标题添加一个 View ,然后标题下方是一个列表。

我的适配器的代码 fragment :

 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();
}
}

更多详情:

目前我的适配器只支持一种 View 类型。是否可以添加另一种也支持数据绑定(bind)的 View 类型?

最佳答案

可以在一个 ViewHolder 中使用多个绑定(bind)。以下是具有 2 种类型项目的适配器示例:

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;
}
}
}

关于使用数据绑定(bind)的具有多个 View 类型的 Android recyclerview 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41773667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com