我有非常简单的代码,应该根据有关DataBinding的几篇文章工作,但由于某种原因它不是。
我试图将RecycleView与Databinding一起使用。
class ItemViewHolder extends RecyclerView.ViewHolder{
ViewAgendaItemBinding binding;
public ItemViewHolder(View itemView) {
super(itemView);
binding = ViewAgendaItemBinding.bind(itemView); //this is line where it's throw an error.
}
}
我检查了此bind
方法的生成版本,它看起来像这样:
public static ViewAgendaItemBinding bind(android.view.View view, android.databinding.DataBindingComponent bindingComponent) {
if (!"layout/view_agenda_item_0".equals(view.getTag())) {
throw new RuntimeException("view tag isn't correct on view:" + view.getTag());
}
return new ViewAgendaItemBinding(bindingComponent, view);
}
这很奇怪。因为我没有layout/view_agenda_item_0
。这个视图应该使用layout/view_agenda_item
,我显然没有设置任何标签。然而,即使我为这个确切的元素设置了这些标记,它仍然无法正常工作。
我该怎么做才能解决这个问题?
P.S。但是,如果我将此代码ViewAgendaItemBinding.bind(itemView)
更改为此代码DataBindingUtils.bind(itemView)
,则该代码正常工作。这是数据绑定库中的问题吗?
答案 0 :(得分:4)
数据绑定在编译期间重写您的布局文件,因此它会自动添加该标记。
DataBindingUtils.bind
检查视图上是否存在绑定并重新使用它。看起来像你在其他地方初始化了该视图的数据绑定。我认为我们应该改变ViewAgendaItemBinding.bind
方法来做同样的事情。