2016-07-10 45 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}" 

设置它给各种错误吧。这样做,你可以在XML与布局管理做这样

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

同样的事情,我要的是你知道如何解决这个问题,通过与一类?

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>