使用包含标签的Android数据绑定

更新说明:

上面的例子工作正常 ,因为1.0-rc4版本修复了需要不必要variables的问题。

原始问题:

我完全按照文档中所描述的那样工作:

main.xml中:

<layout xmlns:andr... <data> </data> <include layout="@layout/buttons"></include> .... 

buttons.xml:

 <layout xmlns:andr...> <data> </data> <Button android:id="@+id/button" ...." /> 

MyActivity.java:

  ... binding = DataBindingUtil.inflate... binding.button; ->cannot resolve symbol 'button' 

如何获得button?

问题是包含的布局不被认为是一个数据绑定的布局。 为了使它作为一个,你需要传递一个variables:

buttons.xml:

 <layout xmlns:andr...> <data> <variable name="foo" type="int"/> </data> <Button android:id="@+id/button" ...." /> 

main.xml中:

 <layout xmlns:andr... ... <include layout="@layout/buttons" android:id="@+id/buttons" app:foo="@{1}"/> .... 

然后,您可以通过button字段间接访问button:

 MainBinding binding = MainBinding.inflate(getLayoutInflater()); binding.buttons.button 

从1.0-RC4(刚发布)开始,你不再需要这个variables。 您可以将其简化为:

buttons.xml:

 <layout xmlns:andr...> <Button android:id="@+id/button" ...." /> 

main.xml中:

 <layout xmlns:andr... ... <include layout="@layout/buttons" android:id="@+id/buttons"/> .... 

另一个有趣的事情是,你可以像这样从绑定器中将variables传递给导入的布局:

MainBinding binding = MainBinding.inflate(getLayoutInflater()); binding.buttons.setVariable(BR.varID, variable)