带有类引用的Android数据绑定绑定适配器

时间:2016-07-10 20:43:44

标签: android xml data-binding

我创建了这个Binding Adapter

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

并以XML格式设置

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

它会带来各种错误。我想要的是做与使用XML中的LayoutManager一样的事情

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

你知道如何通过传递课程来解决这个问题吗?

P.S。我不想在XML中传递变量引用,因为假设我只想使用XML。

1 个答案:

答案 0 :(得分:6)

您似乎正在尝试在XML中设置类,但是正在接受BindingAdapter中的实例。如果你想接受一个类并在你的BindingAdapter中实例化它,它将使用反射,如下所示:

@BindingAdapter("adapter")
public static void setAdapter(RecyclerView view, Class adapter)  {
    try {
        Object instance = adapter.newInstance();
        view.setAdapter((RecyclerView.Adapter)instance);
    } 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>