2016-08-07 5 views
1

Androidの新しいデータバインドサポートを使用して、RecyclerViewsに関連付けられたすべての定型文を最終的に取り除くことを大いに期待していましたが、公式のAndroidデータバインドドキュメントではほとんど触れられていません。Android DatabindingUtils:プロジェクト全体に単一のアダプタを使用する方法は?

私は、件名に「ヒント」を含むブログ記事をいくつか見つけましたが、recyclerviewインスタンスごとにアダプタを作成する必要性を避ける方法の完全なサンプル実装を探しています。

ここではいくつかの参照コードですが、それが完了していない: https://stfalcon.com/en/blog/post/faster-android-apps-with-databinding#takeaways

+1

"RecyclerView"で使用するための別個のデータセットとレンダリングルールセットごとにアダプタクラスを作成しなければならないことを意味すると仮定すると、限られた状況を除いては可能ではありません。 'RecyclerView.Adapter'はあなたのデータがどこから来たのかを知るクラスです。そのコードはそのデータの表現(例えば、 'ArrayList'対' [] '対' Cursor')によって異なります。 'Adapter'サブクラスは、データバインディングフレームワークの範囲外にある複数のビュータイプやデータの挿入/削除なども扱います。 – CommonsWare

+0

ブログ作成者が[GitHub](https://github.com/stfalcon-studio/DataBindingExample)にプッシュしたサンプルアプリケーションで、完全な 'RecyclerView.Adapter'を見つけることができます。 – yennsarah

+0

Amylinnありがとうございますが、あなたがリンクしている例は、双方向のデータバインディングのためのもので、これはrecyclerviewsのユースケースではありません。 – JayJay

答えて

1

優れたソリューションは、デリゲートを使用してあります - 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(); 
} 
関連する問題