Android DataBinding 項目使用介紹(一)

Android DataBinding 介紹

對於databinding,或許有不少人已經用在開發之中,今天爲了不給自己閒下來,總結下自己在開發中用到的知識。先上官方介紹http://developer.android.com/intl/zh-cn/tools/data-binding/guide.html。最近在項目中使MVP+databinding的搭建去開發項目,真的發現代碼量,邏輯都得到一個提升,但也有個不好的地方,一些類與接口卻增加了不少,而且,如果項目接手,學習成本也挺大的。沒辦法任何東西都有優點與缺點。databinding是2015google IO大會上提出的一個官方庫,每次google發佈都帶來不少驚喜。

databinding是MVVM框架模式,直接在xml中去綁定數據與視圖,業務邏輯分離。整體邏輯非常清晰,代碼量也大大減少,特別是在我們常用的listview,recyclerView等等,不用再去setText,setOnListener等等。可以說瞬間逼格大大提升。

Android studio配置

2.0的android studio基本上都自帶這個庫,使用只要在gradle中簡單配置一下。

android {
    ....
    dataBinding {
        enabled = true
    }
}


使用從XML開始


我們先看一段代碼。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
	<import type="com.example.User"/>
       <variable name="user" type="User"/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <TextView 
	   android:id="@+id\tv_name"
	   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>

public class User {
    public final String firstName;
    public final String lastName;
   
    public void setFirstName(String firstName){
	this.firstName=firstName
	}
    public String getFirstName(){
	return firstName
	}
    public void setLastName(String lastName){
	this.lastName=lastName;
	}
    public String getLastName(){
	return lastName;
	}
}



最外層開始是用layout標籤,接下來子標籤data,在data標籤中就是我們需要綁定的數據類型,常用使用的使用import,variable.
1,import都知道是導入的意思,類似我們java文件的import是一個道理,導包。import下的type就是我們需要導入的類的全包名。
2,variable是我們需要使用的類,這裏其實可以理解爲new User(),name是命名,type是類,這樣很好理解。
3,如何綁定view?在databinding綁定數據使用符號:@{對象.變量},@{對象.方法}
4,當然一些String,boolean,Interger,float等等,都可以使用,而且這些是不要去import,可以直接使用。

<variable name="name" type="String"/>
<variable name="isTag" type="boolean"/>
<variable name="num" type="float"/>

5,在xml中對象與字符拼接,使用‘’符號。android:text="@{‘姓名’+user.lastName}“
6,在xml中很多語法還是支持的。android:visibility="@{user.img==null?Gone:Visible}“

進一步Activity數據獲取與綁定

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
   User user = new User();
   user.setFirstName("jet");
   user.setLastName("xiao");
   binding.setUser(user);
}

1,這裏我們不再使用activity中的setContentView了,

使用DataBindingUtils去setContentView(Activity activity,int layout),去綁定視圖,觀察源碼可以知道其實內部也是

使用Activity的setContentView()去綁定的。在我們編寫xml完成後,會自動生存一個ActivityMainBinding類,

這個自動生存是有規則的,(Activity+佈局名稱+Binding),所以這一點要注意。

ActivityMainBinding這個類會有一個方法是設置xml中的variable對象的,

如我們xml中命名name是user,ActivityMainBinding中會自動生成setUser();方法,提供我們去設置數據源。


2,ActivityMainBinding還提供了我們xml佈局中的id控件,不需要使用findViewById()去獲取,這個非常的爽。

如上面xml佈局中的id->tv_name,在ActivityMainBinding中會自動生成ActivityMainBinding.tvName這個控件非常的便捷。



先簡單介紹這裏,下節我們介紹在項目listview,include標籤,imageview如何綁定url等等的使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章