Data-Binding(二):include标签的使用
我演示了如何使用AS生成一个作用于单一的布局文件的View Holder类,但是如果这个布局文件是中包含有其他的布局中的呢?又或是这个布局文件是合并于其他布局之中呢?
最终证明这些都是可以支持的,但是不同的布局文件生成不同的类。下面是一个例子:
hello_world.xml
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<include
android:id="@+id/included"
layout="@layout/included_layout"/>
</LinearLayout>
</layout>
included_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/world"/>
</layout>
你可以通过下面的方法访问这两个不同的TextView:
HelloWorldBinding binding =
HelloWorldBinding.inflate(getLayoutInflater());
binding.hello.setText(“Hello”);
binding.included.world.setText(“World”);
对于included的模式同样运用在其他Views中:对于标签的ID被用作其类的字段名。所包含的布局,它产生了自己的类以及自己在其布局中的Views字段。所有的IDs都可以被开发者简单的在不同的两个布局中调用。例如,若你引用同样的布局两次:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<include
android:id="@+id/world1"
layout="@layout/included_layout"/>
<include
android:id="@+id/world2"
layout="@layout/included_layout"/>
</LinearLayout>
</layout>
这两个「world」TextView,可以被简单的调用:
HelloWorldBinding binding =
HelloWorldBinding.inflate(getLayoutInflater());
binding.hello.setText(“Hello”);
binding.world1.world.setText(“First World”);
binding.world2.world.setText(“Second World”);
记住需要给你include的标签一个ID,并且不能是公共的字段。而且,记住通过使用外层的布局去生成你所需要的字段。这将会出发预处理步骤,允许其与规定字段的Views相关联并产生一个类。
如果你深入的去看生成的类,你将会看到,他们其实在引用的任何时间都是使用的相同的一个。例如,如果你有一个goodbye_world.xml类,其中包含一个included_layout.xml,只会有一个类产生。
历史文章记录: