RuntimeException:视图标记在视图上不正确:ViewAgendaItemBinding.bind()方法

时间:2016-06-17 14:10:03

标签: java android data-binding android-recyclerview android-databinding

我有非常简单的代码,应该根据有关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),则该代码正常工作。这是数据绑定库中的问题吗?

1 个答案:

答案 0 :(得分:4)

数据绑定在编译期间重写您的布局文件,因此它会自动添加该标记。

DataBindingUtils.bind检查视图上是否存在绑定并重新使用它。看起来像你在其他地方初始化了该视图的数据绑定。我认为我们应该改变ViewAgendaItemBinding.bind方法来做同样的事情。