欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析Android企業(yè)級(jí)開發(fā)數(shù)據(jù)綁定技術(shù)

 更新時(shí)間:2017年12月18日 16:19:56   作者:CMusketeer  
這篇文章通過代碼實(shí)例分析了Android企業(yè)級(jí)開發(fā)數(shù)據(jù)綁定技術(shù)的應(yīng)用以及相關(guān)的原理知識(shí),跟著小編一起學(xué)習(xí)參考下吧。

這篇文章通過發(fā)文的方式讓大家知道什么是數(shù)據(jù)綁定,以及為什么要用數(shù)據(jù)綁定等問題,有助于大家理解Android企業(yè)級(jí)開發(fā)數(shù)據(jù)綁定技術(shù)。

首先要了解什么是數(shù)據(jù)綁定?為什么要用數(shù)據(jù)綁定?怎么用數(shù)據(jù)綁定?   語法的使用

簡單例子,數(shù)據(jù)綁定textview控件,一般情況下我們都是些一個(gè)布局文件,然后布局文件里放一些textview,然后通過Activity來findviewbyid來獲取id,然后對(duì)象.setText("")?,F(xiàn)在我們學(xué)了數(shù)據(jù)綁定,就可以不用之前的方法了。

把庫加載進(jìn)來:因?yàn)檫@個(gè)東西是網(wǎng)上的東西需要我們下載。

 dataBinding{
 enabled true
 }

1:首先寫一個(gè)布局文件databinding.xml,這個(gè)名字可以隨便起,但是在后面要用到該名字。

這里要說明一點(diǎn),我們先創(chuàng)建一個(gè)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,這個(gè)layout和我們之前用到的LinearLayout不一樣,這個(gè)僅僅是為了把類加載進(jìn)來。

<layout xmlns:android="http://schemas.android.com/apk/res/android">,然后data是加載Users類路徑,name是給他起個(gè)代號(hào)。然后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,只是對(duì)象變了,DatabindingBinding這個(gè)類是不是很熟悉,它就是我們之前創(chuàng)建databinding.xml的時(shí)候自動(dòng)創(chuàng)建的類,生成模式是xml文件名字(首字母大寫)+Binding。

 //DatabindingBing該類是自動(dòng)生成的,是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);

 運(yùn)行結(jié)果:

ok,現(xiàn)在都出來了,我們還有可能會(huì)在上面做一些其他的操作,比如說,李四前面加一個(gè)用戶名,北京前面加一個(gè)地址,這就是字符串的拼接,此拼接和以往的有些不同,如:

<!--
1:在@{}中可以拼接字符串,要求是雙引號(hào)里只能用該形式 `ceshi`,但單引號(hào)里可以用雙引號(hào)。
"@{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)@{}在做比較的時(shí)候 可以用轉(zhuǎn)義 如< &lt; 大于> &rt;

-->
------------------------------------------

 

這樣做同樣是可以顯示左邊是用戶名,右邊是用張三。數(shù)據(jù)綁定也是可以實(shí)現(xiàn)這樣的效果,只要左邊一個(gè)布局,右邊一個(gè)布局就可以了,而且用的都是同一個(gè)user布局,只是加載兩遍,數(shù)據(jù)是按照list方式傳入,數(shù)據(jù)綁定的好處有很多,比如說:listview中的點(diǎn)擊事件,對(duì)于item的點(diǎn)擊就不說了,難點(diǎn)一般都是item里的一個(gè)小控件,我們往往就還要再寫接口等用回調(diào)的方法證明它被點(diǎn)擊了,而這個(gè)數(shù)據(jù)綁定就簡單了,直接加上name,那么你點(diǎn)擊的是哪一個(gè)用戶名就會(huì)顯示出來,下面寫一寫代碼來捋一捋思路,具體寫法如下:這個(gè)和上面代碼有很多一樣的地方,但為了方便你們看,我重新粘貼一遍

首先還是寫一個(gè)model類Users,這里面我加上了點(diǎn)擊事件,獲取上下文用view.getContext()。與Users對(duì)應(yīng)的user_layout.xml文件一個(gè)總得xml文件,用來加載兩列user_layout文件 Activity中加載數(shù)據(jù) 1:首先還是寫一個(gè)model類Users,這里面我加上了點(diǎn)擊事件,獲取上下文用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(), "點(diǎn)擊了:"+name, Toast.LENGTH_SHORT).show();
 }
 public boolean longClick1(View view){
 Toast.makeText(view.getContext(), "長按了:"+name, Toast.LENGTH_SHORT).show();
 return true;
 }


}

 2:與Users對(duì)應(yīng)的user_layout.xml文件

android:onClick="@{ user.click1}"就是點(diǎn)擊事件,需要注意的是click1是Users.java中的click1()方法,名字必須一樣,長按點(diǎn)擊也是如此。

<?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:一個(gè)總得xml文件,用來加載兩列user_layout文件

這里需要注意的是,因?yàn)槲覀儗⒁獋魅雔ist集合,所以在variable中type要改一下,類要加載進(jìn)來,這就是規(guī)范。需要注意的是在List<Users>中的(<)符號(hào)是不能寫的,要這樣轉(zhuǎn)義type="java.util.List&lt;Users&gt;    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該類是自動(dòng)生成的,是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);

這里還有一個(gè)問題,如果你是新寫的java文件或者xml文件,那就沒什么問題了,但如果你是接著第一個(gè)例子修改的,那就有可能報(bào)包路徑什么找不到,這個(gè)也沒事,只要再clean一下就好了,

以上就本篇文章的全部內(nèi)容,大家在參考學(xué)習(xí)的時(shí)候如果有不明白的地方可以在下方的留言區(qū)討論。

相關(guān)文章

最新評(píng)論