我创建了这个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。
答案 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>