接口和生成的绑定文件
Interfaces and Generated Binding Files
我正在使用 RecyclerView 的数据绑定,该 RecyclerView 具有多个不同的布局文件,但有一个公共视图模型。有没有办法让生成的绑定文件实现一个通用接口来简化以下(有效但丑陋的)代码?
给定的布局文件如:
R.layout.list_item_cat
R.layout.list_item_dog
R.layout.list_item_mouse
在 ActionAdapter 中:
@Override
public ActionAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
@LayoutRes int layoutToInflate;
switch (viewType) {
case 0:
layoutToInflate = R.layout.list_item_cat;
break;
case 1:
layoutToInflate = R.layout.list_item_dog;
break;
case 2:
layoutToInflate = R.layout.list_item_mouse;
break;
}
return new ViewHolder(DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), layoutToInflate, parent, false));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (holder.mBinding instanceof ListItemCatBinding) {
((ListItemCatBinding) holder.mBinding).setViewModel(mViewModelList.get(position));
}
else if (holder.mBinding instanceof ListItemDogBinding) {
((ListItemDogBinding) holder.mBinding).setViewModel(mViewModelList.get(position));
}
else if (holder.mBinding instanceof ListItemMouseBinding) {
((ListItemMouseBinding) holder.mBinding).setViewModel(mViewModelList.get(position));
}
我知道上面的例子还不错,但是如果能够操作一组共享共同事物的绑定文件,而不必经常检查和转换它们的类型,尤其是在更多复杂的情况。
查看这篇文章:
https://medium.com/google-developers/android-data-binding-recyclerview-db7c40d9f0e4#.l6soxb3sd
您可以使用:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mBinding.setVariable(BR.viewModel, mViewModelList.get(position));
holder.mBinding.executePendingBindings();
}
您应该覆盖函数 getViewType(int position) 以获得您想要绑定数据的正确布局
我正在使用 RecyclerView 的数据绑定,该 RecyclerView 具有多个不同的布局文件,但有一个公共视图模型。有没有办法让生成的绑定文件实现一个通用接口来简化以下(有效但丑陋的)代码?
给定的布局文件如:
R.layout.list_item_cat
R.layout.list_item_dog
R.layout.list_item_mouse
在 ActionAdapter 中:
@Override
public ActionAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
@LayoutRes int layoutToInflate;
switch (viewType) {
case 0:
layoutToInflate = R.layout.list_item_cat;
break;
case 1:
layoutToInflate = R.layout.list_item_dog;
break;
case 2:
layoutToInflate = R.layout.list_item_mouse;
break;
}
return new ViewHolder(DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), layoutToInflate, parent, false));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (holder.mBinding instanceof ListItemCatBinding) {
((ListItemCatBinding) holder.mBinding).setViewModel(mViewModelList.get(position));
}
else if (holder.mBinding instanceof ListItemDogBinding) {
((ListItemDogBinding) holder.mBinding).setViewModel(mViewModelList.get(position));
}
else if (holder.mBinding instanceof ListItemMouseBinding) {
((ListItemMouseBinding) holder.mBinding).setViewModel(mViewModelList.get(position));
}
我知道上面的例子还不错,但是如果能够操作一组共享共同事物的绑定文件,而不必经常检查和转换它们的类型,尤其是在更多复杂的情况。
查看这篇文章:
https://medium.com/google-developers/android-data-binding-recyclerview-db7c40d9f0e4#.l6soxb3sd
您可以使用:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mBinding.setVariable(BR.viewModel, mViewModelList.get(position));
holder.mBinding.executePendingBindings();
}
您应该覆盖函数 getViewType(int position) 以获得您想要绑定数据的正确布局