優れたソリューションは、デリゲートを使用してあります - http://hannesdorfmann.com/android/adapter-delegates 私はそれはデータバインディングのための簡単な変更でアプローチを使用します。
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
中:
あなたが簡単な方法を探している場合は、あなたが一般的な方法を使用している場合でも、魔法がバインド可能ViewHolderであり、このライブラリhttps://github.com/drstranges/DataBinding_For_RecyclerView
任意の方法を見て
{
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();
}
"RecyclerView"で使用するための別個のデータセットとレンダリングルールセットごとにアダプタクラスを作成しなければならないことを意味すると仮定すると、限られた状況を除いては可能ではありません。 'RecyclerView.Adapter'はあなたのデータがどこから来たのかを知るクラスです。そのコードはそのデータの表現(例えば、 'ArrayList'対' [] '対' Cursor')によって異なります。 'Adapter'サブクラスは、データバインディングフレームワークの範囲外にある複数のビュータイプやデータの挿入/削除なども扱います。 – CommonsWare
ブログ作成者が[GitHub](https://github.com/stfalcon-studio/DataBindingExample)にプッシュしたサンプルアプリケーションで、完全な 'RecyclerView.Adapter'を見つけることができます。 – yennsarah
Amylinnありがとうございますが、あなたがリンクしている例は、双方向のデータバインディングのためのもので、これはrecyclerviewsのユースケースではありません。 – JayJay