TÌM HIỂU DATA BINDING TRONG ANDROID

Data Binding trong android

Trong bài học này chúng ta sẽ tìm hiểu về Data binding. Một thư viện trong android hỗ trợ loại bỏ findViewById(). Điều này đặc biệt hữu ích trong việc bạn có một project với hàng trăm trường thông tin khác nhau. Thay vì phải findViewById() đến phát ngán và gán giá trị cho chúng thì chúng ta có thể dùng Data Binding.

Bây giờ để dễ hiểu hơn, chúng ta sẽ làm một ví dụ cơ bản áp dụng Data Binding và đổ dữ liệu lên một Recyclerview.

Recyclerview là một thư viện hỗ trợ trong Android Lollipop gần giống với ListView nhưng có nhiêu sự lựa chọn và hoạt động linh hoạt hơn. Bên mình đã có một bài viết giới thiệu cụ thể về Recyclerview, các bạn có thể xem lại tại đây.

Đầu tiên chúng ta sẽ tạo một project mới. Mình đặt tên project là Devpro_Databinding và Activity dạng Empty Activity với name là DataBindingListActivity. Tiếp theo chúng ta cần cấu hình môi trường cho Data Binding. Tại góc nhìn project ta vào app/build.gradle Thêm dòng code này vào bên trong thẻ android{} và nhấn Sync Now để cập nhập lại.

1

 

Tiếp theo tại activity_data_binding_list.xml chúng ta cấu hình cho Recyclerview. Trước tiên chúng ta cần add thư viện  Recyclerview vào. Ta vào File\Project Structure…\ vào thẻ app\Dependencies tích vào dấu + màu xanh chọn Library dependency. Tìm với từ khóa recyclerview vào ô bên dưới và nhấn chọn như mình bên dưới rồi ấn OK.

2

 

Sau đó trong tại activity_data_binding_list.xml chúng ta cấu hình Recyclerview

 

Tiếp theo chúng ta tạo một Class User chứa thông tin là name và address cần đổ lên Recyclerview.

Sau đó chúng ta tạo một file xml giao diện item hiển thị lên Recyclerview. Mình đặt tên là user_item.xml Tại đây ta sẽ gán luôn dữ liệu truyền vào cho các TextView bằng cách sử dụng Data Binding.

 

Các bạn lưu ý phần này:

Với user là tên biến và type là đường dẫn tới nguồn dữ liệu đổ vào các TextView. Ở đây là class User với đường dẫn là com.example.dong.devpro_databinding.User.

Các bạn có thể lấy đường dẫn này lại class User:

3

 

 

Và để ý tiếp phần này.

Ở đây phần text ta truyền vào giá trị là user.displayName. Giá trị này thể hiện nó nằm ở biến tên là user( Biến này ta vừa gán với giá trị type là đường dẫn tới class User) và giá trị đổ vào là displayName (Trong class User ta đã tạo)

Vậy là chúng ta đã hiểu về cách gán giá trị trong file xml của data binding.

Việc tiếp theo chúng ta cần làm là cấu hình tiếp cho Recyclerview. Ta tạo một inner class mở rộng từ RecyclerView.ViewHolder. Class này chúng ta sẽ khai báo để đổ giá trị từ class User vào RecyclerView.

Chúng ta cần để ý tới biến UserItemBinding. Biến này sẽ được android studio tự tạo ra theo file xml chúng ta vừa tạo để hiện dữ liệu. Vừa nãy chúng ta tạo user_item.xml để đổ dữ liệu vào nên android sẽ tự tạo ra một biến là UserItemBinding. Ví dụ chúng ta tạo file xml khác là devpro_item và binding data trên xml này thì android sẽ tự tạo ra biến DevproItemBinding. Các dòng code tiếp theo có tác dụng gán giá trị vào.

Tiếp theo chúng ta tạo một class Adapter là UserAdapter mở rộng từ RecyclerView.Adapter. và override 3 phương thức cơ bản của RecyclerView.Adapter

+ onCreateViewHolder(): tạo một ViewHolder mới khi được gọi.

+ onBindViewHolder(): gắn kết dữ liệu và view trong ViewHolder.

+getItemCount(): trả về số lượng item của danh sách.

Vậy là xong phần adapter

Cuối cùng chúng ta quay lại DataBindingListActivity để định nghĩa cho RecyclerView và tạo dữ liệu cho User và gán dữ liệu vào RecyclerView.

Run App và kiểm tra kết quả.

4

Như vậy mình đã giới thiệu xong về Data Binding android. Chúng ta có thể thấy áp dụng Data Binding sẽ bỏ qua được findViewById() và gán giá trị. Thay vào đó chúng ta sẽ gán luôn giá trị tại file xml.

Còn rất nhiều kỹ thuật về Data Binding khác các bạn có thể tham khảo tại: http://developer.android.com/intl/vi/tools/data-binding/guide.html

Hoặc có thể tham khảo khóa học trực tiếp tại Devpro Việt Nam tại đây.
Các bạn có thể tải source code tại đây.
Chúc các bạn thành công.

 

Add a Comment

Your email address will not be published. Required fields are marked *