2016-07-10 22 views
3

Ich habe diese Bindung AdapterAndroid Data Binding-Adapter mit Klassenreferenz Bindung

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

und setzen in XML

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

es alle Arten von Fehlern mit ihm gibt. Was ich will, ist, das Gleiche zu tun, wie Sie mit Layoutmanagern in XML wie diese

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

zu tun Wissen Sie, wie dieses Problem zu lösen, mit einer Klasse vorbei?

P.S. Ich möchte keine Variablenreferenz in XML übergeben, weil ich sagen möchte, dass ich nur XML verwenden möchte.

Antwort

3

Es scheint, dass Sie versuchen, eine Klasse im XML festzulegen, aber eine Instanz in Ihrem BindingAdapter akzeptieren. Wenn Sie eine Klasse annehmen möchten und instanziiert es in Ihrem BindingAdapter, wird es Reflexion, wie folgt verwenden:

@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(....); 
    } 
} 

Wenn Sie eine Instanz auf Ihre Bindung an geben wollen (ein besserer Ansatz, IMO), Sie don‘ t benötige einen BindingAdapter. Sie können sich auf den bestehenden setAdapter Anruf verlassen:

<layout> 
    <data> 
     <variable name="adapter" type="android.support.v7.widget.RecyclerView.Adapter"/> 
    </data> 
    <android.support.v7.widget.RecyclerView 
     app:adapter="@{adapter}" .../> 
</layout>