Data Binding trong android

Data Binding trong android là 1 thuật ngữ chỉ đến việc ta bind hay map dữ liệu từ source lên các view coponent. Trong android chắc chắn 1 điều là ai cũng biết funtion .setText(“data”). Nhưng để đơn giản hóa công việc này ta sẽ sử dụng thư viện data binding trong android. Không chỉ đơn giản hóa công việc bind data cho người lập trình. Data binding trong android còn rất nhiều ưu điểm mà chúng ta sẽ cùng nhau tìm hiểu trong bài viết này. 

Ưu điểm Data binding

+ Đồng bộ hóa dữ liệu lên view tự động.

+ Tối ưu hóa công việc Bind data cho developer.

+ Tăng hiệu suất ứng dụng . vì thay vì ta phải sử dụng các biến variable local khi set get dữ liệu. Ta sẽ không cần gọi đến findViewByID() để tìm đến đúng view. Mọi thứ sẽ xảy ra trong thời gian compile.

Để dễ dàng tiếp cận ta sẽ xem thử 2 ví dụ khi sử dụng databinding và không sử dụng databinding xem có gì khác nhau nhé.

* Môi trường sử dụng Data binding:

Không giống như các thư viện khác data binding được hỗ trợ trực tiếp từ Android SDK version 21 trở lên. Để bắt đầu ta cần enable trong file gradle của module app:

 

1. Layout

Ta có thể xem nhanh qua 2 layout này và chú ý đến thuộc tính :

1.1. Layout không sử dụng data binding trong android:

1.2. Layout sử dụng data binding trong android:

Trong databinding layout ta sử dụng thêm thẻ <layout>  với cú pháp như sau :

Tất cả layout sẽ được bọc bởi thẻ <layout> và để khai báo hay mapping 1 tới 1 đối tượng nào đó ta cần khai bảo thẻ <variable >

trong thẻ variable ta có name=”tên biến” và type=”là đường dẫn trỏ tới  class data”.

Và khi muốn set giá trị của đối tượng như hovaten,gioitinh,tuoi.v.v.v vào các vị trí tương ứng trên layout. Ví dụ ta muốn set hovaten lên Editext thì ta sẽ làm như sau :

Ta thấy thuộc tính như :

với giaovien là tên biến được mapping tới đối tượng GiaoVien trong model. Vậy thì giaovien có thể gọi đc hết tất cả các thuộc tính của Object GiaoVien. Ta có thể gọi giaovien.hovaten, giaovien.tuoi, giaovien.diachi, giaovien.tinhtranghonnhan.

2.  Java class Acitivity.

2.1 Activity không sử dụng Binding data trong android.

Nhìn rất basic đúng không ạ? findView qua id và map data vào đúng view. Nhưng code khá dài và nó nhảm nhí. Vì ta có thể làm gì đó ngắn gọn hơn và nhiều chất xám hơn như sử dụng ButterKnife với các anotation.

2.2 Khi sử dụng BindingData:

 Oh ! Giờ ta đã không còn nhìn thấy mấy call method findID nữa rồi. Thay vào đó ta chỉ cần bind data thôi. Vậy ta đang tò mò không biết làm sao để gọi được Object này : ActivityWithBindBindingActivityWithBindBinding “(“Activity_NameClassActivity_Binding ” ) là object mà sau khi compile layout ta sẽ có đc.  Ta muốn gọi được nó ta cần phải rebuild project sau khi khai báo thành công bên file layout để Android SDK compile data binding trong file layout ra. 

3. Một số thứ vui vẻ trong Binding data.

3.1 Viết biểu thức trong file layout:

Trong ví dụ trên khi hiển thị thuộc tính tinhtranghonnhan,

chúng ta đã sử dụng biểu thức ternary operator trong java. Nhưng 1 trường hợp ta có thể viết ngắn hơn như :

Viết đầy đủ :

3.2 Tự động cập nhật data khi thay đổi lên UI.

Trong class GiaoVien ta sẽ khai báo các thuộc tính với ObservableField vd :

với ObservableField ta sẽ set data như sau :

Ta sẽ cập nhật lại bên file layout như sau:

** Chú ý:

+ Khi bind 1 số data kiểu dữ liệu là number thì ta phải thêm dấu nháy(+_int) giống như bên trên mình có bind chỗ giaovien.tuoiOb.

+ Tất cả các observable này đều chạy trên UIThread. Một lời khuyên là ta không nên sử dụng nó trong list.

3.3 Ta có thể Handler Event:

Vd: trong trường hợp ta muốn khi click vào button Next thì nó sẽ gọi method next(), khi nhấn vô button dữ liệu sẽ được cập nhật lại và tự động update lên UI:

Ta sẽ cần phải khai náo 1 class như sau:

Giờ ta sẽ bind nó qua layout :

ok, Và trong button Next mình sẽ call method next() vào onclick của button :

Bên trên ta đang sử dụng biểu thức lamdar trong java 8, gọi method next() vào trong event click.

Rebuild project, Và ta sẽ setMyEvent vô ActivityBinding:

Download source code ngay bên dưới.

Link download source code 1:

Data Binding trong android

Link download source code 2:

Data Binding trong android

4. Kết thúc.

Về Data binding trong android vẫn còn một số tính năng mà trong bài viết sau mình sẽ tiếp tục đề cập như: Binding data trong Listview hoặc RecyclerView. Custom view với Binding, Binding Data với Glide,picaso. Nhìn chung lại, Binding Data là một thư viện được tích hợp sẵn trong Android SDK version 21, bên cạnh những ưu điểm thì nó vẫn còn nhiều hạn chế.

Ví dụ như về call method trong xml layout thì Editor chưa hỗ trợ ta auto complete khi ta đang viết tên method, dẫn đến việc viết sai cú pháp. DataBinding không hỗ trợ 1 số keyword trong java như :new, this, super.

Trên đây là những gì cơ bản nhất về Data binding trong android. Nếu bạn đang sử dụng MVVC thì không thể bỏ qua nó.

 

Tác giả :Ninh Luyen.

 

 

Bình luận

Loading...