Data binding的使用(一)-----hello word

Data binding的使用(一)

官网地址:Google Android Data Binding Library

Demo地址:(https://github.com/zhangiqlin/DataBindingDemo)

1.准备工作

Data Binding是一个兼容库,支持到Android2.1以上,要使用 data binding 保证你的Gradle Plugin 在1.5版本或者高过1.5,如果低于就请更新你的Gradle Plugin,并且请确保你在你的Android SDK Manager里面已经更新下载了最新的且能够支持Data binding的兼容库(Support repository)

2.配置Gradle

现在不需要在build.gradle里面引用诸如
classpath 'com.android.databinding 这样的代码了,现在可以直接在build.gradle使用如下配置即可

android {
    ....
    dataBinding {
        enabled = true
    }
}

使用Data binding

  1. 步骤一 编写Layout文件

Layout布局文件根布局更改为

<layout xmlns:android="http://schemas.android.com/apk/res/android">

其他布局还是和原来的一样,只是根布局的标签更改为<layout>,例如

<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable name="user" type="com.example.User"/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.firstName}"/>
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.lastName}"/>
   </LinearLayout>
</layout>

使用<data>...</data> 标签声明你需要使用的变量,如上 布局文件声明了一个名为user的变量,类型是一个对应在包com.example包里面的User对象,最好写全称(包名+类名)。

User.java

public class User {
   public final String firstName;
   public final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
}

如下的书写方式也是可以的

public class User {
   private final String firstName;
   private final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
   public String getFirstName() {
       return this.firstName;
   }
   public String getLastName() {
       return this.lastName;
   }
}

在布局文件中使用对象的属性的时候应该这样使用 @{对象.属性} 就像下面这样:

<TextView android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@{user.firstName}"/>
  1. 步骤2 Activity里面配置
    由于我们使用了Data Binding,配置完Layout文件以后,会自动帮我们生成一个java文件,生成规则为layout文件名+Binding,比如activity_main对应生成的类文件名为ActivityMainBinding,我们要使用该类填充我们在xml文件重定义的数据 user 对象。如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
   User user = new User("Test", "User");
   binding.setUser(user);
}

我们应该使用DataBindingUtil.setContentView(this, R.layout.main_activity); 来加载我们的layout文件,不应该使用原来的setContentView,只有这样我们才能得到MainActivityBinding 对象,然后设置xml中定义的数据。

当然如果是ListView或者是RecyclerView 的Item要使用Data Binding还可以使用下面2种方式获取View

ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);
//or
ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);

到这里,第一次使用Data Binding就可以正常的跑起来了,试试吧,不用再像以前那样,获取view的id,然后在去设置值,现在可以直接就在xml中引入该对象,直接设置对象的属性值。赶快试试吧。

接下来讲解如何绑定属性字段的值,当值发生变化的时候,xml绑定了该属性的值也会发生变化。

结束

代码很简单,没有留下Demo 按着步骤走就行了。

注意

运行的时候,如果出现什么方法找不到,什么的,多检查检查xml中是否配置错误,是否哪些地方写错了。

猜你喜欢

转载自blog.csdn.net/xiaxiayige/article/details/70139794