我非常希望在Android上使用新的数据绑定支持最终摆脱与RecyclerViews相关的所有样板,但却发现官方Android数据绑定文档几乎没有提到这个主题。
所以,即使你发现了一些博客帖子,其中包含了一些提示'关于这个问题,我还在寻找一个关于如何避免每个recyclerview实例创建一个适配器的完整示例实现。
这里有一些参考代码,但它不完整: https://stfalcon.com/en/blog/post/faster-android-apps-with-databinding#takeaways
答案 0 :(得分:1)
使用代表有很好的解决方案 - http://hannesdorfmann.com/android/adapter-delegates 我使用它的方法对DataBinding进行了简单的更改。
如果您正在寻找简单的方法,请查看此库https://github.com/drstranges/DataBinding_For_RecyclerView
无论如何,即使你使用普通方式,魔法也在可绑定的ViewHolder中:
public class BindingHolder<VB extends ViewDataBinding> extends RecyclerView.ViewHolder {
private VB mBinding;
public static <VB extends ViewDataBinding> BindingHolder<VB> newInstance(
@LayoutRes int layoutId, LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
VB vb = DataBindingUtil.inflate(inflater, layoutId, parent, attachToParent);
return new BindingHolder<>(vb);
}
public BindingHolder(VB binding) {
super(binding.getRoot());
this.mBinding= binding;
}
public VB getBinding() {
return mBinding;
}
}
onCreateViewHolder
中的
{
BindingHolder holder = BindingHolder.newInstance(R.layout.item,
LayoutInflater.from(parent.getContext()), parent, false);
//set listeners and action handlers
return holder;
}
onBindViewHolder
中的
{
ItemBinding binding = holder.getBinding();
Item item = items.get(position);
binding.setItem(item);
binding.executePendingBindings();
}
// or
{
ViewDataBinding binding = holder.getBinding();
Object item = items.get(position);
binding.setVariable(BR.item, item);
binding.executePendingBindings();
}