有使用委托很好的解决方案 - http://hannesdorfmann.com/android/adapter-delegates 我用它与数据绑定简单的修改办法。
如果您正在寻找简单的方法,看看这个库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;
}
in 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();
}
假设你的意思是“避免创建每个不同的数据集适配器类和渲染规则集用在'RecyclerView'”,这不会是可能除了在有限的情况下。 'RecyclerView.Adapter'是知道你的数据来自哪里的类;其代码会因数据表示而有所不同(例如'ArrayList'与'[]'与'Cursor')。 'Adapter'子类还处理诸如多视图类型和数据插入/删除等事情,这些都超出了数据绑定框架的范围。 – CommonsWare
您可以在博客作者推送到[GitHub](https://github.com/stfalcon-studio/DataBindingExample)的示例应用程序中找到完整的'RecyclerView.Adapter'。 – yennsarah
谢谢Amylinn,但看起来你链接的例子是双向数据绑定,这不是recyclerviews的用例。 – JayJay