有使用委託很好的解決方案 - 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