淺析Android企業(yè)級開發(fā)數(shù)據(jù)綁定技術
這篇文章通過發(fā)文的方式讓大家知道什么是數(shù)據(jù)綁定,以及為什么要用數(shù)據(jù)綁定等問題,有助于大家理解Android企業(yè)級開發(fā)數(shù)據(jù)綁定技術。
首先要了解什么是數(shù)據(jù)綁定?為什么要用數(shù)據(jù)綁定?怎么用數(shù)據(jù)綁定? 語法的使用
簡單例子,數(shù)據(jù)綁定textview控件,一般情況下我們都是些一個布局文件,然后布局文件里放一些textview,然后通過Activity來findviewbyid來獲取id,然后對象.setText("")?,F(xiàn)在我們學了數(shù)據(jù)綁定,就可以不用之前的方法了。
把庫加載進來:因為這個東西是網(wǎng)上的東西需要我們下載。
dataBinding{ enabled true }
1:首先寫一個布局文件databinding.xml,這個名字可以隨便起,但是在后面要用到該名字。
這里要說明一點,我們先創(chuàng)建一個java文件,作為model,只有setget方法。
Users.java
package databinding; public class Users { public String name,address,email; private boolean vip; public boolean isVip() { return vip; } public void setVip(boolean vip) { this.vip = vip; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
我們可以看出下面的布局文件和之前的不一樣,我們首先要寫的是layout,這個layout和我們之前用到的LinearLayout不一樣,這個僅僅是為了把類加載進來。
<layout xmlns:android="http://schemas.android.com/apk/res/android">,然后data是加載Users類路徑,name是給他起個代號。然后TextView賦值是@{user.name},現(xiàn)在布局文件是寫好了,但是沒有任何值,所有的值都是在Activity中寫。
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="databinding.Users"></variable> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@{user.vip ? 0xffff00ff:0xff000000}" android:text="@{user.name}" android:textSize="25dp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{user.address}" android:textSize="25dp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{user.email}" android:textSize="25dp" /> </LinearLayout> </layout>
2:DataBActivity.java
我們可以看到加載布局方法還是setContentView,只是對象變了,DatabindingBinding這個類是不是很熟悉,它就是我們之前創(chuàng)建databinding.xml的時候自動創(chuàng)建的類,生成模式是xml文件名字(首字母大寫)+Binding。
//DatabindingBing該類是自動生成的,是xml文件名字(首字母大寫)+Binding DatabindingBinding databindingBing=DataBindingUtil.setContentView(this, R.layout.databinding); Users users=new Users(); users.setName("李四"); users.setAddress("北京"); users.setEmail("1245334@163.com"); users.setVip(true); databindingBing.setUser(users);
運行結(jié)果:
ok,現(xiàn)在都出來了,我們還有可能會在上面做一些其他的操作,比如說,李四前面加一個用戶名,北京前面加一個地址,這就是字符串的拼接,此拼接和以往的有些不同,如:
<!--
1:在@{}中可以拼接字符串,要求是雙引號里只能用該形式 `ceshi`,但單引號里可以用雙引號。
"@{user.name + `(` +user.address + `)`}"
2:@{}里可以做一些簡單的判斷,可以用賦值、判斷等
(1)@{user.name == null ? user.address : user.name}//如果是null的話,就顯示user.address
(2)@{user.name ?? user.address}//如果user.name不為null就顯示,為null就顯示user.address
(3)@{}在做比較的時候 可以用轉(zhuǎn)義 如< < 大于> &rt;
-->
------------------------------------------
這樣做同樣是可以顯示左邊是用戶名,右邊是用張三。數(shù)據(jù)綁定也是可以實現(xiàn)這樣的效果,只要左邊一個布局,右邊一個布局就可以了,而且用的都是同一個user布局,只是加載兩遍,數(shù)據(jù)是按照list方式傳入,數(shù)據(jù)綁定的好處有很多,比如說:listview中的點擊事件,對于item的點擊就不說了,難點一般都是item里的一個小控件,我們往往就還要再寫接口等用回調(diào)的方法證明它被點擊了,而這個數(shù)據(jù)綁定就簡單了,直接加上name,那么你點擊的是哪一個用戶名就會顯示出來,下面寫一寫代碼來捋一捋思路,具體寫法如下:這個和上面代碼有很多一樣的地方,但為了方便你們看,我重新粘貼一遍
首先還是寫一個model類Users,這里面我加上了點擊事件,獲取上下文用view.getContext()。與Users對應的user_layout.xml文件一個總得xml文件,用來加載兩列user_layout文件 Activity中加載數(shù)據(jù) 1:首先還是寫一個model類Users,這里面我加上了點擊事件,獲取上下文用view.getContext()。
package databinding; import android.view.View; import android.widget.Toast; public class Users { public String name,address,email; private boolean vip; public boolean isVip() { return vip; } public void setVip(boolean vip) { this.vip = vip; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void click1(View view){ Toast.makeText(view.getContext(), "點擊了:"+name, Toast.LENGTH_SHORT).show(); } public boolean longClick1(View view){ Toast.makeText(view.getContext(), "長按了:"+name, Toast.LENGTH_SHORT).show(); return true; } }
2:與Users對應的user_layout.xml文件
android:onClick="@{ user.click1}"就是點擊事件,需要注意的是click1是Users.java中的click1()方法,名字必須一樣,長按點擊也是如此。
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="databinding.Users"></variable> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@{user.vip ? 0xffff00ff:0xff000000}" android:onClick="@{ user.click1}" android:text="@{user.name }" android:textSize="25dp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:onLongClick="@{ user.longClick1}" android:text="@{user.address}" android:textSize="25dp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{user.email}" android:textSize="25dp" /> </LinearLayout> </layout>
3:一個總得xml文件,用來加載兩列user_layout文件
這里需要注意的是,因為我們將要傳入list集合,所以在variable中type要改一下,類要加載進來,這就是規(guī)范。需要注意的是在List<Users>中的(<)符號是不能寫的,要這樣轉(zhuǎn)義type="java.util.List<Users> app:user="@{ users[0] }"是加載數(shù)據(jù),如果你們打app:user什么都不出的話,就在布局最上頭加上xmlns:app="http://schemas.android.com/apk/res-auto"即可。
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <import type="databinding.Users"></import> <variable name="users" type="java.util.List<Users>"></variable> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent"> <include layout="@layout/user_layout" app:user="@{ users[0] }"></include> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent"> <include layout="@layout/user_layout" app:user="@{ users[1] }"></include> </LinearLayout> </LinearLayout> </layout>
4:Activity中具體操作
//DatabindingBing該類是自動生成的,是xml文件名字(首字母大寫)+Binding DatabindingBinding databindingBinding=DataBindingUtil.setContentView(this, R.layout.databinding); Users users=new Users(); users.setName("用戶名:"); users.setAddress("地址:"); users.setEmail("E-mail:"); users.setVip(true); Users users1=new Users(); users1.setName("李四"); users1.setAddress("北京"); users1.setEmail("1245334@163.com"); users1.setVip(true); List<Users> list=new ArrayList<>(); list.add(users); list.add(users1); databindingBinding.setUsers(list);
這里還有一個問題,如果你是新寫的java文件或者xml文件,那就沒什么問題了,但如果你是接著第一個例子修改的,那就有可能報包路徑什么找不到,這個也沒事,只要再clean一下就好了,
以上就本篇文章的全部內(nèi)容,大家在參考學習的時候如果有不明白的地方可以在下方的留言區(qū)討論。
相關文章
Android組件實現(xiàn)長按彈出上下文菜單功能的方法
這篇文章主要介紹了Android組件實現(xiàn)長按彈出上下文菜單功能的方法,結(jié)合實例形式分析了Android實現(xiàn)長按彈出上下文菜單的具體步驟與相關操作技巧,需要的朋友可以參考下2017-07-07Android實現(xiàn)在列表List中顯示半透明小窗體效果的控件用法詳解
這篇文章主要介紹了Android實現(xiàn)在列表List中顯示半透明小窗體效果的控件用法,結(jié)合實例形式分析了Android半透明提示框的實現(xiàn)與設置技巧,需要的朋友可以參考下2016-06-06Android RecyclerView實現(xiàn)下拉刷新和上拉加載
這篇文章主要介紹了Android RecyclerView實現(xiàn)下拉刷新和上拉加載的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-05-05