Các biến (Variables)
Trong Phần 1 chúng ta đã tìm hiểu về cách viết một ứng dụng Android sử dụng kỹ thuật data binding. Để dùng data binding chúng ta cần thực hiện một số thao tác cấu hình và khai báo một số biến trong phần tử <data> như sau:
<data> <variable name="txtName" type="String"/> <variable name="plName" type="String"/> </data>
Các biến được khai báo với phần tử <variable>, tên biến là giá trị của thuộc tính name và kiểu dữ liệu là giá trị của thuộc tính type.
Kiểu dữ liệu của một biến có thể là các kiểu định nghĩa sẵn như String, Integer, Double, Float, Boolean,…, kiểu collection như List<String> hay kiểu do chúng ta định nghĩa (sẽ được tìm hiểu trong bài này).
Các biến sẽ được khởi tạo giá trị tương ứng với kiểu dữ liệu, ví dụ biến kiểu Integer sẽ là 0, biến kiểu Boolean là false hay các kiểu tham chiếu sẽ là null.
Các biến có thể được giám sát hoặc không (Chi tiết về vấn đề này sẽ được tìm hiểu trong một bài khác).
Một biến đặc biệt gọi là context được phát sinh khi cần sử dụng các biểu thức kết buộc (binding expressions).
Các biểu thức (Expressions) và toán tử (Operators)
Bên cạnh các biến, chúng ta có thể dùng các biểu thức và các toán tử khi sử dụng data binding. Các biểu thức và toán tử này tương tự trong Java như:
- Toán tử số học +, -, *, /, %
- Toán tử luận lý &&, ||
- Toán tử so sánh ==, >, <,….
…
Chúng ta cũng có thể sử dụng toán tử kiểm tra giá trị null thu gọn là ?? (Null coalescing operator). Tuy nhiên, có một số toán tử chúng ta không thể dùng như this, super hay new.
Ứng dụng minh họa
Bây giờ chúng ta sẽ điều chỉnh ứng dụng MyDataBinding đã tạo trong Phần 1 bằng cách thêm một lớp tên User như sau:
package com.example.mydatabinding; public class User { public final String fullName; public final Integer age; public User(String fullName, Integer age) { this.fullName = fullName; this.age = age; } }
Trong tập tin activity_main.xml điều chỉnh giá trị thuộc tính text của TextView và EditView như sau:
<TextView android:id="@+id/txtName" android:text='@{user.fullName??"Please enter name!"}' .../> <EditText android:id="@+id/plName" android:text="@{user.age.toString()}" .../>
Biểu thức
user.fullName??"Please enter name!"
tương đương với cách viết truyền thống:
user.fullName!= null ? user.fullName : "Please enter name!"
Vì biến age có kiểu là Integer nên chúng ta cần gọi phương thức toString() để chuyển sang kiểu String.
Trong <data> chúng ta khai báo biến user như sau:
<data> <variable name="user" type ="com.example.mydatabinding.User" /> </data>
Kiểu dữ liệu của biến user là kiểu lớp User chúng ta đã định nghĩa ở trên. Lưu ý chúng ta cần chỉ rõ package của lớp User, ở đây là com.example.mydatabinding, cùng gói với lớp MainActivity.
Trong tập tin MainActivity.java, chúng ta thay đổi lại lớp Change_Name như sau:
public void Change_Name(View v){ User user = new User("Test", 34); binding.setUser(user); }
Chi tiết cách thay đổi ứng dụng và thực thi có thể xem video bên dưới
Xem source code tại GitHub.
Ý kiến bài viết