Thư viện Data Binding cung cấp cách thức để chúng ta liên kết giao diện người dùng với logic của ứng dụng. Sử dụng Data Binding cho phép các giá trị UI tự động cập nhật mà chúng ta không phải thao tác thông qua code Java hay Kotlin. Điều này làm giảm rất nhiều mã code.
Data Binding giúp các lập trình viên không cần phải viết quá nhiều code để ghép data vào các component trong file xml.
Thông thường, các layout được khai báo trong các Activity với các phương thức ánh xạ và gọi.
Chẳng hạn, đoạn mã dưới đây gọi findViewById()
để tìm kiếm một TextView và liên kết nó với thuộc tính email của biến viewModel:
TextView txtView = findViewById(R.id.text_demo); txtView.setText(viewModel.getEmail());
Nhưng nếu bạn sử dụng Data Binding thì code sẽ chỉ còn như thế này:
<TextView android:text="@{viewmodel.userName}" />
Rất ngắn gọn phải không?
Nội dung chính của bài viết
#Hướng dẫn sử dụng Data Binding trong Android
1. Data Binding là gì?
Data Binding là một thư viện được tích hợp trong Android Jetpack. Nó cho phép liên kết giữa dữ liệu logic với các UI Element( ví dụ như : TextView, EditText, ImageView…).
Điều này giúp các nhà phát triển lược bớt rất nhiều đoạn code liên kết kiểu như: findViewById() không cần thiết nữa. Điều này sẽ giúp cho dự án của bạn sẽ dễ Unit Test hơn, khi lẽ ra phần liên kết UI không thuộc vào business của ứng dụng.
Nhờ những ưu điểm của Data Binding mà Data Binding được sử dụng rất nhiều trong các kiến trúc ứng dụng MVP, MVVM…
Nếu bạn muốn tìm hiểu thêm về Android Jetpack thì mời bạn đọc bài viết bên dưới:
2. Để sử dụng Data Binding cần những gì?
Chính vì Data Binding được tích hợp trong Android Jetpack nên khả năng tương thích ngược rất tốt. Bạn có thể chạy Data Binding cho các thiết bị Android 4.0 trở lên.
Về Android Plugin for Gradle, mình khuyến khích các bạn cứ bản mới nhất mà dùng. Tuy nhiên, theo thông tin từ Google thì Data Binding hỗ trợ từ phiên bản 1.5.0 trở lên.
Chốt lại, dưới đây là thông tin phiên bản tối thiểu hỗ trợ Data Binding:
- Android Support Library > 15.0
- Android M SDK 23.0.
- Android Studio 1.3 trở lên.
3. Cấu hình build.gradle
Để bắt đầu sử dụng Data Binding trong Andorid studio, bạn cần làm những độc tác sau:
- Thêm thư viện support trong mục dependencies.
- Bật Data Binding trong build.gradle.
android { dataBinding { enabled = true } compileSdkVersion 27 defaultConfig { applicationId "com.example.databinding " minSdkVersion 16 // .. } }
4. Android studio hỗ trợ Data Binding những gì?
Có một số điểm hay ho là Android Studio hỗ trợ bạn code Data Binding khá tốt. Một số tính năng mà Android Studio hỗ trợ như:
- Hỗ trợ làm nổi bật Syntax
- References, bao gồm cả navigation
- Hỗ trợ gợi ý code XML
- Đánh dấu lỗi cú pháp.
Ngoài ra, bạn để ý Preview panel trong Layout Editor sẽ hiển thị giá trị mặc định data binding nếu được cung cấp.
Ví dụ: Preview pane sẽ hiển thị giá trị default_value
của TextView được khai báo như bên dưới.
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{person.country, default=default_value}"/>
>>> Đọc thêm: Debug trong Android Studio
5.Tạo ứng dụng demo sử dụng Data Binding
Sau khi bạn đã hiểu và biết cách cấu hình để có thể sử dụng Data Binding. Chúng ta sẽ cùng nhau tạo một ứng dụng demo sử dụng Data Binding.
Đầu tiên các bạn thêm class User để lưu thông tin User gồm 2 thuộc tính: lastName và firstName.
public class User { // firstName và lastName. private String firstName; private String lastName; public User(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }
Bây giờ chúng ta sẽ làm việc với file layout với activity_main.xml Để sử dụng Databinding trong layout, phần tử gốc nên bắt đầu bằng thẻ <layout>
.
Cùng với nó, các thẻ <data>
và <variable>
được sử dụng.
<layout ...> <data> <variable name="..." type="..." /> </data> <LinearLayout ...> <!-- YOUR LAYOUT HERE --> </LinearLayout> </layout>
Tất cả các biến và phương thức được đặt trong thẻ data. Thuộc tính name sẽ là tên và type phải thuộc class object User.
Và giờ chúng ta thiết kế giao diện trong file activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.example.databinding.User" /> </data> <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" tools:showIn="@layout/activity_main"> <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>
Khi chúng ta thêm xong thì chúng ta cần click vào buildàclean project và buildàrebuild project để phải layout nhận được object User.
Vì trong activity_main.xml bạn đã khai báo layout này sẽ sử dụng DataBinding để hiển thị dữ liệu thì Android Studio sẽ tự động sinh ra cho bạn class ActivityMainBinding. Và giờ bạn chỉ cần khao báo để sử dụng.
Tiếp theo, chúng ta làm việc với file ActivityMain.java
import com.example.databinding.databinding.ActivityMainBinding; public class MainActivity extends AppCompatActivity { private User user; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_main); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); user = new User("Test","User"); user.setFirstName("Luong"); user.setLastName("Dong"); binding.setUser(user); } }
ActivityMainBinding inflates layout đầu tiên và binding. setFirstName () để liên kết đối tượng User với layout.
Và đây là kết quả sau khi chúng ta sử dụng Data Binding.
#Tạm kết
Như vậy là chúng ta đã cũng nhau tìm hiểu và biết cách sử dụng Data Binding trong Android.
Các bạn có thể download source code của bài viết tại đây:
Đây là kỹ thuật rất hay được sử dụng trong lập trình ứng dụng web. Nếu bạn đã từng làm các ứng dụng NodeJs hay các framework web như Java Spring, Laravel thì chắc không còn lạ lẫm gì kỹ thuật này cả.
Hy vọng bài hôm nay sẽ giúp các bạn hiểu rõ và làm việc tốt với Data Binding.
Bình luận. Cùng nhau thảo luận nhé!