Android-0.DataBinding基礎示例
基礎示例
1.在module的build.gradle
的android
節點中新增如下配置:
android {
// 啟用dataBinding
dataBinding{
enabled = true;
}
......
}
2.建立一個簡單的UserBean類:
public class UserBean { private String name; //姓名 private int age; //年齡 public UserBean(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
注意get/set方式是需要定義的,不然會提示:
msg:Could not find accessor xxx
3.使用了DataBinding之後的Activity的佈局檔案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="myvideo.duowan.com.databindingdemo.bean.UserBean"/> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.name}"/> <!--注意:這裡age是int型別,必須轉化為String,否則會執行時異常--> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{String.valueOf(user.age)}"/> </LinearLayout> </layout>
根節點變成了layout
,裡面包括了data
節點和傳統的佈局。
data
節點中宣告一個variable
變數,名字叫user
,關聯了type為UserBean
物件。
而TextView中使用了android:text="@{user.name}"
和android:text="@{String.valueOf(user.age)}"
來直接訪問UserBean
的兩個私有成員.
4.MainActivity
import myvideo.duowan.com.databindingdemo.databinding.ActivityMainBinding;// 匯入 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 根據佈局檔案的名稱生成Binding類的規則為:以大寫形式開始,刪除下劃線(_),並使用駝峰命名,然後字尾為“Binding” // eg: activity_main-->ActivityMainBinding // 同時必須import 包名.databinding.ActivityMainBinding; ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main); UserBean userBean = new UserBean("張三",25); binding.setUser(userBean); } }
根據佈局檔案的名稱生成Binding類的規則為:以大寫形式開始,刪除下劃線(_),並使用駝峰命名,然後字尾為“Binding”。例如:activity_main
–>ActivityMainBinding
。
ActivityMainBinding
是系統自動生成的類,需要import 包名.databinding.ActivityMainBinding;
。
binding.setUser
是自動生成的函式,set/get
+ variable
變數的名字user
(第一個字母大寫)
執行結果:
系統自動生成的ActivityMainBinding不能被除錯,一般位於
databinding\ActivityMainBinding.java
1.在xml中引入一些基礎變數Variables
activity_main.xml:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="str"
type="String" />
<variable
name="age"
type="int" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{str}" />
<!--注意:這裡age是int型別,必須轉化為String,否則會執行時異常-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{String.valueOf(age)}" />
</LinearLayout>
</layout>
MainActivity:
import myvideo.duowan.com.databindingdemo.databinding.ActivityMainBinding;// 匯入
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 根據佈局檔案的名稱生成Binding類的規則為:以大寫形式開始,刪除下劃線(_),並使用駝峰命名,然後字尾為“Binding”
// eg: activity_main-->ActivityMainBinding
// 同時必須import 包名.databinding.ActivityMainBinding;
ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
binding.setStr("張三");
binding.setAge(25);
}
}
執行結果和前面一樣,注意這時使用的是binding.setStr
+binding.setAge
,分別對應variable
變數的名字name="str"
+ name="age"
2.引入一些高階變數Variables
在上面,我們學會了如何在xml中定義變數,以及在控制元件中使用。同樣,我們可以在data中定義像List、Map,陣列等這樣的集合變數,只是它的實現稍微有點不同,下面就一起來看看是如何定義以及使用的。