在上一篇文章中介绍了使用Android Studio 1.5+可以很方便地移除findViewById。它本质上是这里描述的View Holder模型。
我介绍了使用 Android Studio为一个布局文件生成一个类作为一个View Holder,但是included的布局呢?怎样合并included的布局?
原文链接:https://medium.com/google-developers/android-data-binding-that-include-thing-1c8791dd6038#.t4cdcln7i
结果表明这些也是支持的,但每个布局文件生成一个不同的类。这是一个示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24hello_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>
你可以通过这种方法访问两个不同的TextViews:
1 | HelloWorldBinding binding = |
included的文件的模型和Views的模型是一样的:
1 | <layout xmlns:android="http://schemas.android.com/apk/res/android"> |
两个“world” TextViews 可以很容易地被访问:1
2
3
4
5HelloWorldBinding binding =
HelloWorldBinding.inflate(getLayoutInflater());
binding.hello.setText(“Hello”);
binding.world1.world.setText(“First World”);
binding.world2.world.setText(“Second World”);
记住给include标签一个ID否则将不会给它公有field。还有如果你想生成fields在布局外层使用<layout>
。这会触发预处理步骤允许Views和fields进行关联并生成一个类。
如果你查看生成的类,任何时候included使用的是相同的一个。例如,你有一个goodbye_world.xml包含一个included_layout.xml,只会为它生成一个类。
你可以从这里下载完整代码:https://github.com/yuweiguocn/DataBindingDemo