Data-Binding(二):include标签的使用
在上一篇[《不要再使用findViewById》](http://www.domon.cn/2016/10/26/data_binding_do_not_use_findviewbyid)中你看到如何通过AS 1.5以上的版本避免使用findViewById的。这本质上其实是这个View Holder父类如下的描述:
我演示了如何使用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中:对于
<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,并且不能是公共的字段。而且,记住通过使用外层
如果你深入的去看生成的类,你将会看到,他们其实在引用的任何时间都是使用的相同的一个。例如,如果你有一个goodbye_world.xml类,其中包含一个included_layout.xml,只会有一个类产生。
历史文章记录: