2016-07-10 5 views
3

と結合アダプタのバインド私はこのバインディングアダプタAndroidのデータは、クラス参照

@BindingAdapter("adapter") 
public static void setAdapter(RecyclerView view, RecyclerView.Adapter<RecyclerView.ViewHolder> adapter) { 
    view.setAdapter(adapter); 
} 

を作成し、それはそれでエラーのすべての種類を与えるXML

app:adapter="@{com.package.Adapter}" 

に設定してください。あなたはこの

app:layoutManager="android.support.v7.widget.LinearLayoutManager" 

のようなXMLでのLayoutManagerを行うことができますと同じことをやって何がしたいですあなたがクラスを渡すことで、この問題を解決する方法を知っていますか?

P.S. XMLで変数参照を渡したくないのは、XMLだけを使いたいからです。

答えて

3

XMLでクラスを設定しようとしていますが、BindingAdapterでインスタンスを受け入れているようです。あなたがクラスを受け入れ、自分のBindingAdapterでそれをインスタンス化したい場合、それはこのように、リフレクションを使用します。

@BindingAdapter("adapter") 
public static void setAdapter(RecyclerView view, Class adapter) { 
    try { 
     Object instance = adapter.newInstance(); 
     view.setAdapter((RecyclerView.Adapter)adapter); 
    } catch (Exception e) { 
     Log.e(....); 
    } 
} 

あなたの結合(より良いアプローチ、IMO)にインスタンスを渡したい場合は、「ドンBindingAdapterが必要です。既存のsetAdapterコールに頼ることができます:

<layout> 
    <data> 
     <variable name="adapter" type="android.support.v7.widget.RecyclerView.Adapter"/> 
    </data> 
    <android.support.v7.widget.RecyclerView 
     app:adapter="@{adapter}" .../> 
</layout> 
関連する問題