Một thư viện rất đáng giá mà Android M sở hữu: thư viện Data Binding. Thư viện giúp các lập trình viên không phải viết quá nhiều code để “ghép dữ liệu” vào các component trên file layout XML nữa.

Nếu bạn nào đã từng lập trình web thì có thể nôm na hiểu thư viện này giống với AngularJS. Chúng ta có các “layout template” với “data holder”, giờ chỉ cần định nghĩa nguồn dữ liệu, tự chúng sẽ hiển thị theo data tương ứng (mô hình MVVM).

Nếu trước kia để bind dữ liệu vào component, chúng ta sẽ phải làm 2 bước:

//bind component vào 1 biến
txtHello = (TextView) findViewById(R.id.txtHello);
//bind data vào biến để rồi component sẽ thay đổi data hiển thị tương ứng.
txtHello.setText(“Hello, how are you?”);

Còn bây giờ? Hãy xem một ví dụ đơn giản để hiểu thư viện này hoạt động thế nào?

1. Cài đặt Android M SDK (v23) và Android Studio 1.3

Để sử dụng được thư viện Data Binding, bạn cần phải thỏa mãn 3 điều kiện sau:

+ Android Support Library > 15.0 (cần để download thư viện này trên maven/jcenter, hoặc nếu không muốn sử dụng Maven thì download package Android Support Library > 23 (toàn bộ thư viện offline)
+ Android M SDK 23.0 và build tool của nó.
+ Android Studio 1.3 (hiện Google chỉ còn support Android Studio nên bạn nào dùng Eclipse chắc sẽ phải đợi các nhóm làm Tool support)
Học lập trình Android ở đâu tốt nhất?
Sử dụng manager để download tool + sdk 23
Học lập trình Android online
Sử dụng support repo để download lib trên jcenter hoặc chọn support library để sử dụng offline
Học lập trình Android xin việc làm
Chọn kênh update: nên chọn kênh Canary là bản testing cuối cùng cho người dùng. Hoặc chọn Beta Testing là phiên bản dành cho tester chạy ổn định nhất.

2. Kickoff dự án demo:

Source code demo được dựa trên help chính thức của google: https://developer.android.com/tools/data-binding/guide.html.

Gồm 2 bước + 5 dòng code:

Bước 2.1: Include thư viện Data Library vào trong hệ thống.

Học lập trình Android hay iOS
Include thư viện từ trên jcenter
Học lập trình di động Android hay iOS
Thông báo cho Android Studio generate file data-binding (giống như file R.java vậy)

Bước 2.2: Sử dụng thẻ data trong file layout xml

+ add namespace in xml layout

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

+ tạo 1 class POJO (entity)

public class User {
  private final String firstName;

  public User(String firstName) {
    this.firstName = firstName;
  }

  public String getFirstName() {
    return this.firstName;
  }
}

+ thêm thẻ data vào layout

<data>
    <variable name="user" type="com.n9xkun.iziroi.databinding.pojo.User"/>
</data>

+ setup data_holder trong file layout

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView android:layout_width="wrap_content"
              android:layout_height="50dp"
              android:text="@{user.firstName}"/>
</LinearLayout>

+ tạo 1 entity và chạy xem kết quả

Object binding = DataBindingUtil.setContentView(this, R.layout.activity_simple_binding);
ActivitySimpleBindingBinding binder = (ActivitySimpleBindingBinding) binding;

User user = new User("Test User 1");
binder.setUser(user);

Học lập trình trực tuyến tốt nhất

Học lập trình trực tuyến rẻ nhất

Quá đơn giản phải không nhỉ? Chúng ta sẽ không thấy các câu lệnh findViewById và setXXX nữa. Chỉ cần nguồn dữ liệu, tự động data_binding sẽ bind dữ liệu đó cho các component. Ngoài support kiểu POJO đơn giản, Data Binding support hàng loạt case khác nhau như:

- Binding event
- Sử dụng import để tweak Layout Detail
- Sử dụng nhiều nguồn variables
- Viết custom binding
- Hỗ trợ expression language
- Hỗ trợ observables objects (các object khi có thay đổi prop, view sẽ tự thay đổi tương ứng)
- View và ViewStubs
- Dynamic Binding
- Converters
- và ...

Mình sẽ post toàn bộ các video cho Android M trong crash course “Android M có gì hay”. Bài viết sau chúng ta sẽ cùng nghía qua API cho hệ thống permission mới trong Android M nhé.

Các bạn có thể download source code ở đây:  https://github.com/hoangpt/blog/tree/master/android/DataBinding_DemoApp