Google推出本身官方的數據綁定框架Data Binding Library 已經好久了,不少企業也在使用html
面試的時候也有問到,因此也去學習了一番,特來分享一下,但願對各位有所幫助java
Data Binding 是把數據直接綁定到 XML 文件上,並能實現自動刷新。android
Data Binding 減小了代碼的耦合性,一些如 findViewById、setText 之類的操做均可以經過綁定實現。面試
Data Binding 是MVVM模式開發的app
Google 官方文檔:https://developer.android.google.cn/reference/android/databinding/package-summary框架
環境要求:ide
系統版本:Android 2.1(API level 7)及以上佈局
Gradle版本:1.5.0-alpha1及以上性能
Android Studio版本:1.3及以上學習
在app根目錄的build.gradle文件中加入Data Binding配置:
android { compileSdkVersion 22 buildToolsVersion "27.0.3" dataBinding { enabled = true } ..... }
簡單的一個案例 :佈局中綁定數據
先寫一個實體類
public class Employee { public Employee(String frstName,String lastName){ this.frstName = frstName; this.lastName = lastName; } private String frstName; private String lastName; public String getFrstName() { return frstName; } public void setFrstName(String frstName) { this.frstName = frstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }
佈局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:bind="http://schemas.android.com/apk/res-auto"> <data> <variable name="employee" type="com.zhangqie.databinding.demo1.Employee"/><!-- 實體類的地址 --> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tv_name1" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/tv_name2" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{employee.frstName}" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{employee.lastName}" /> </LinearLayout> </layout>
由上面可看出
咱們在最外層再套一層 標籤layout,裏面包含了 data標籤和LinearLayout標籤
data 標籤下面的 variable 定義數據綁定用的實體類
type 裏面是完整的帶包名的類,
name 自定義一個名稱,下面具體綁定的時候就是用的這個名稱。
layout標籤的定義會默認生成一個數據綁定類 (類名根據文件的名稱來生成)
編譯一下我就會生成了一個 ActivityMainBinding的類了
以後MainActivity中
public class MainActivity extends AppCompatActivity { Employee employee = new Employee("切切歆語","小張"); ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_main); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); //直接訪問Id 設置屬性 binding.tvName1.setText("小張"); binding.tvName2.setText("歆語"); //傳對象綁定數據 //兩種方式同樣 binding.setEmployee(employee); //binding.setVariable(com.zhangqie.databinding.BR.employee,employee); } }
這樣看起來是否是方便了不少呢
運行效果:
MVVM 的實現
提升開發效率
性能高 ,功能強
上面是Data Binding的基本用法,固然還有其它不少的高級用法,更新中...