美文网首页
Data Binding Library

Data Binding Library

作者: eagleRock | 来源:发表于2016-08-31 17:19 被阅读159次

    开发环境要求

    • Gradle版本1.5.0及以上;
    • Android Studio1.3及以上;
    • 支持Android 2.1及以上;

    配置环境

    在需要使用DataBinding的模块的build.gradle中添加下面的代码片段:

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

    如果有的模块依赖了使用DataBinding的库,那么也需要加上如上代码。

    DataBinding的布局文件

    DataBinging的布局文件有点不同,他的根标签和之后的data元素区别与其它传统布局。
    一个简单的例子如下:

    <?xml version="1.0" encoding="utf-8"?>
    <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>
    
    • 根标签不再是一个ViewLayout,而是layout
    • 声明了布局中要用到的数据:
      <variable name="user" type="com.example.User"/>
    • View的属性可以使用@{}语法来表示。这里,TextView的text属性被设置为User的fristName:
           <TextView android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="@{user.firstName}"/>
    

    定义数据对象

    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;
       }
    }
    

    使用这两种形式都是可以的,第一种情况,表达式@{user.firstName}会直接使用firstName字段的值;第二种情况,则使用getFirstName()方法的返回值。

    绑定数据

    默认情况下,会根据生成一个Binding类,这个类的名字由Binding布局的名字转变为驼峰式并在后面加上“Binding”,例如main_Activity就会自动生成一个名为dMainAcitivityBinding的类。这个类可以设置要绑定的数据,以及设置Activity、Fragment、View的布局。
    简单的例子如下:

    @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);
    }
    

    例子

    github:https://github.com/yoxin/dataBinding
    用Data Binding实现了登陆页面和城市客运站信息查询。

    参考资料

    https://developer.android.com/topic/libraries/data-binding/index.html
    https://mutualmobile.com/posts/using-data-binding-api-in-recyclerview
    https://github.com/radzio/android-data-binding-recyclerview

    相关文章

      网友评论

          本文标题:Data Binding Library

          本文链接:https://www.haomeiwen.com/subject/qtafettx.html