HomeĐời SốngData binding là gì

Data binding là gì

04:12, 30/03/2021

Architecture Pattern

Là một tập hợp các nguyên tắc để phân tích và lý giải bọn họ có những class nào? bọn chúng vẫn cửa hàng với nhau ra sao để thực hiện một khối hệ thống cụ thể.

Bạn đang xem: Data binding là gì

Các architecture pattern thịnh hành như:

Domain Driven DesignThree-tierMicro-kernelModel-View-ControllerModel-View-ViewModel

Những architecture pattern phổ cập nghỉ ngơi apk nhỏng MVC, MVP.., MVVM. Và ngơi nghỉ nội dung bài viết này bản thân xin giới thiệu về phong thái triển khai MVVM với Data Binding Library.

MVVM cùng với Data Binding

*

Vai trò của từng thành phần nằm trong MVVM:

Model: Chẹn data của ứng dụngView: Hiển thị data mang lại tín đồ dùngViewModel: Chứa hẹn những business logic với cung ứng data nhằm hiển thị lên View.

Data Binding triển khai bind / kết nối các field observable sinh sống ViewModel cho tới những UI element nhỏng TextView tốt ImageView... thông qua những khai báo với rất có thể triển khai đồng hóa bi-directionally / 2 chiều thân View với ViewModel.

Data Binding Library

quý khách hàng có thể sử dụng Data Binding Library trên những sản phẩm công nghệ chạy Android 4.0 (API level 14) hoặc cao hơn nữa.

Bắt đầu

Build environment

Để áp dụng Data Binding Library hãy thêm dataBinding cho tới tệp tin build.gradle ngơi nghỉ module phầm mềm như sau:

app android ... dataBinding enabled = true Để tăng tốc build process và tránh một số lỗi ko cần thiết. Hãy thêm option sau đây cho tới file gradle.properties.

apk.databinding.enableV2=true

Layouts và binding expressions

File layout sẽ phải ban đầu cùng với thẻ layout cùng theo sau nó là một element data với root view. Sau đó là một ví dụ:

Biến user trong thẻ data thể hiện đối tượng người tiêu dùng hoàn toàn có thể được thực hiện trong view.

Data Object

Để thực hiện những đối tượng tài liệu trong layout buộc phải bạn nên knhì báo nó giống hệt như một variable vào thẻ data.

lúc chúng ta khai báo user.firstname thư viện rất có thể truy tìm xuất dữ liệu tới field firstname, method getFirstname() giỏi method firstname() của đối tượng người dùng user truyền vào.

Binding data

Thư viện vẫn tự động sinh những binding class cho mỗi file layout mà lại tất cả root tag là layout. Mặc định thì tên của class phụ thuộc tên của file layout convert tới Pascal case và thêm Binding vào suffix / hậu tố. Ví dụ:

Layout fileBinding class
activity_main.xmlActivityMainBinding.java
fragment_main.xmlFragmentMainBinding.java
item_user.xmlItemUserBinding.java

Sau đây là ví dụ để thực hiện binding data:


Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); User user = new User("Test", "User"); binding.setUser(user);Nếu nhiều người đang sử dụng data binding trong Fragment, ListView tuyệt RecyclerView adapter thì có thể áp dụng các method sau:

ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);// hoặcListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_thành công, viewGroup, false);Event handlingData binding cho phép chúng ta viết biểu thức cách xử lý event được dispatch / gửi trường đoản cú view. Bạn rất có thể sử dụng những vẻ ngoài sau đây nhằm cách xử trí sự kiện:

Method references

Cú pháp thì tựa như android:onCliông xã cơ mà bọn họ tốt làm Khi lắp với method trong activity. Tuy nhiên cùng với Data Binding thì nó vẫn khám nghiệm coi method handler có phù hợp lệ hay là không ngay trên compile time chũm bởi runnning time. Nếu gồm lỗi nó đang trả về một compile time error.

public class MyHandlers public void onClickFriend(View view) ... Lưu ý: Signature / chữ kí của method trong biểu thức ở layout cần phải như là cùng với signature của method trong đối tượng người dùng listener.

Signature: Bao tất cả tên method, danh sách parameter và type của chính nó.

Xem thêm: Trong Phong Thủy Nên Đeo Vòng Tay Bên Nào Hút Tài Vận, Hoá Dữ Thành Lành

Listener bindings

Lúc view phun ra sự khiếu nại thì data binding đã thực hiện reviews biểu thức binding. Nếu sự khiếu nại nhiều người đang lắng tai trả về phong cách dữ liệu không phải void thì biểu thức binding cũng đề nghị trả về cùng thứ hạng tài liệu kia. Ví dụ:

public class Presenter public boolean onLongClick(View view, Task task) android:onLongClick="
(theView) -> presenter.onLongClick(theView, task)"Imports, variables cùng includesImport: chất nhận được chúng ta tiện lợi tmê man chiếu cho tới class bên ngoài file layout tự binding expression của người sử dụng. Ví dụ dưới đây vẫn import class TextUtils cho tới layout file.

Type alias: Để tránh xung chợt class name bởi vì những class trùng thương hiệu khác package chúng ta có thể sử dụng alias. Ví dụ:

Includes: Biến có thể được truyền vào các included layout. Ví dụ:

Đối tượng observableObservable là một đối tượng người dùng rất có thể tiến hành đăng kí / huỷ quăng quật đăng kí những observer / đối tượng người dùng lắng tai tuyệt notify / thông tin cho tới các obhệ thống về rất nhiều chuyển đổi của chính nó trong observer design pattern. Data Binding cung cấp cho bạn 2 cách để có tác dụng đối tượng người dùng, field tốt collection là obserable kia là:

Sử dụng build-in observable classXây dựng các đối tượng người sử dụng obserable vị implement interface Observable

Build-in observable class

Data binding cung cấp sẵn các build-in obserable class như sau:

ObservableBooleanObservableByteObservableCharObservableShortObservableIntObservableLongObservableFloatObservableDoubleObservableParcelableObservableArrayMap

Ví dụ:

public final ObservableBoolean checkbox = new ObservableBoolean();Do checkbox là đối tượng người tiêu dùng obserable cho nên nó có thể tự động hóa tạo thành một thông báo nhằm update UI Lúc bao gồm bất kể biến đổi data nào làm việc nó vị triển khai điện thoại tư vấn checbox.set(true or flase).

Implement interface Observable

Interface obserable có thể chấp nhận được bọn họ add giỏi remove sầu những listener tuy thế bọn họ bắt buộc từ chế tác các thông tin đổi khác tới các listener. Và để thuận tiện rộng chúng ta đề xuất implement interface BaseObservable. Bằng phương pháp áp dụng annotation Bindable cho tới getter và Call notifyPropertyChanged() sinh sống method setter giống hệt như ví dụ sau đây:

private static class User extends BaseObservable private String username;
Bindable public String getUserName() return this.username; public void setUserName(String username) this.username = username; notifyPropertyChanged(BR.username); Data binding sẽ sinch một class là BR chứa ID của các resource được sử dụng vào data binding. Mỗi annotation Bindable đang sinh một ID tương ứng ở BR class trong veo quy trình compilation / dịch.

Binding adapters

Binding adapters chịu trách rưới nhiệm triển khai call method setter của attribute tương xứng nhằm set new value Khi quý giá của nằm trong tính biến hóa hoặc để phối một sự kiện listener.

Data binding đang tự động hóa điện thoại tư vấn method setter khoác định hoặc chúng ta cũng có thể chỉ định một method setter sửa chữa thay thế giỏi triển khai overwrite method setter mang định.

lấy một ví dụ ta gồm attribute là example thì tlỗi viện vẫn tự động hóa đang search kiếm method setExample(arg) nhằm thực hiện mix new value lúc attribute example đổi khác.

Chỉ định một method setter nắm thế

Một vài attribute có tên ko match với tên của method setter. Lúc kia bọn họ yêu cầu sử dụng BindingMethods để hướng đẫn method setter sửa chữa. lấy ví dụ attribute android:tint không tồn tại method setter tương ứng là setTint dẫu vậy nó links cùng với method setter là setImageTintList.


BindingMethods(value = < BindingMethod( type = android.widget.ImageView::class, attribute = "android:tint", method = "setImageTintList")>)Custom logicLúc bạn có nhu cầu custom một binding ngắn gọn xúc tích nhằm đáp ứng nhu cầu nhiệm vụ của chính bản thân mình ví dụ như thực hiện load một image tự mạng internet sau đó hiển thị lên view.


BindingAdapter(value="image", "type", requireAll=false)public static void loadImage(ImageView view, String url, String type) ImageLoader.load(url).into(view);Lưu ý: Binding adapter nhưng mà chúng ta có mang đang ghi đề mặc định binding adapter nếu như tất cả confict xảy ra.

Two-way data binding

Đó là binding data 2D. Một chiều là khi gồm đổi khác tinh thần ở UI sẽ được update vào data resource và ngược chở lại trường hợp có bất kỳ thay đổi như thế nào sinh sống data resource sẽ được update lên UI.

Để tiến hành two-way data binding bạn cần triển khai thêm = vào sau

public final ObservableBoolean checkbox = new ObservableBoolean();Giả sử bây chừ bạn muốn thực hiện một xúc tích và ngắn gọn L Lúc tất cả biến hóa data ở object O thì vẫn làm gắng nào? khi kia bạn có thể triển khai do khởi tạo listener OnPropertyChangedCallbachồng cùng đăng kí nó vào object O. Nlỗi ví dụ sau mình tiến hành xúc tích enable button login lúc user sẽ nhập đầy đủ sinh sống cả username, password với checkbox.

public final ObservableField username = new ObservableField();public final ObservableField password = new ObservableField();public final ObservableBoolean checkbox = new ObservableBoolean();public UserModelView(LoginNavigator navigator) Observable.OnPropertyChangedCallbaông chồng callbaông xã = new Observable.OnPropertyChangedCallback()
Override public void onPropertyChanged(Observable sender, int propertyId) notifyPropertyChanged(BR.loginEnabled); ; username.addOnPropertyChangedCallback(callback); password.addOnPropertyChangedCallback(callback); checkbox.addOnPropertyChangedCallback(callback);
Bindable public boolean getLoginEnabled() if (checkbox.get() &và !TextUtils.isEmpty(username.get()) &và !TextUtils.isEmpty(password.get())) return true; return false; public void onLoginButtonClicked() boolean login = mUserRepository.login(new User(username.get(), password.get())); if (login) if (mNavigator != null) mNavigator.gotoMain(); Trong khi mình bao gồm tạo nên sẵn một project chạy thử tại đây.

Tài liệu tmê man khảo