Android中的XML布局可能变得复杂。因此,将它们分解为概念上独立的模块是一种很好的做法。请考虑以下示例:
主要布局:
<layout>
<data>
<variable name="someVar" type="some.custom.Type"/>
</data>
<SomeLayout
...
android:someAttribute="@{someVar.someProperty}" />
<include layout="@layout/some_other_layout />
</layout>
和some_other_layout.xml
:
<SomeOtherLayout
...
android:someOtherAttribute="@{someVar.someOtherProperty}" />
是否可以在两个独立的布局中使用相同的数据绑定上下文(<data>
内的任何内容)(如给定示例中所示)?
天真地这样做会产生java.lang.IllegalStateException
。
答案 0 :(得分:1)
来自Data Binding Library documentation:
通过使用属性中的应用程序命名空间和变量名,变量可以从包含的布局传递到包含布局的绑定中:
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bind="http://schemas.android.com/apk/res-auto"> <data> <variable name="user" type="com.example.User"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/name" bind:user="@{user}"/> <include layout="@layout/contact" bind:user="@{user}"/> </LinearLayout> </layout>