android data binding实践之:ViewDataBinding
使用过data binding的应该都知道,在编译之后,这个库会为我们生成两种java文件。
BR.java:
这个文件主要是给我们在XML文件中每个标签设置的variable以及被Bindable注解的属性添加一个静态的int类型的索引,在以后对这些variable进行操作的时候都可以使用这个索引id作为参数。
ViewDataBinding的相应的子类:
每一个绑定的XML布局文件都会生成一个以该布局文件名称作为前缀(默认情况下)的ViewDataBinding的相应的子类。在这个文件中主要的处理逻辑主要包括:
- 自动化view管理
- 用户事件监听处理
- 变量管理
- data binding逻辑流
自动化view管理
当我们在XML布局文件中,设置了View的”android:id”属性之后,在生成的ViewDataBinding子类当中会生成一个声明为 public final 的属性值,属性的名称就是我们定义的id的值。而对于那些没有被设置ID的view则会声明为 private final 。因此当我们给view设置了id之后可以不必再自己声明和初始化这些view。
首先XML布局声明如下
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="net.uni_unity.databindingdemo.model.ObserVableUser"/>
<variable
name="activity"
type="net.uni_unity.databindingdemo.SecondActivity"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="@{user.firstName}"/>
...
<Button
android:onClick='@{()->activity.onViewClick("click")}'
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="ListenerBinding"/>
</LinearLayout>
</layout>
在生成的ViewD