Android數據綁定技術一,企業級開發


PS:數據綁定,顧名思義是數據與一些控件或者用戶賬號等綁定,這樣用的好處是便於管理。代碼清晰,量少。

 

  • 首先要了解什么是數據綁定?
  • 為什么要用數據綁定?
  • 怎么用數據綁定?
    •   語法的使用

簡單例子,數據綁定textview控件,一般情況下我們都是些一個布局文件,然后布局文件里放一些textview,然后通過Activity來findviewbyid來獲取id,然后對象.setText("")。現在我們學了數據綁定,就可以不用之前的方法了。

把庫加載進來:因為這個東西是網上的東西需要我們下載。

 dataBinding{
        enabled true
    }

 

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

這里要說明一點,我們先創建一個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},現在布局文件是寫好了,但是沒有任何值,所有的值都是在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這個類是不是很熟悉,它就是我們之前創建databinding.xml的時候自動創建的類,生成模式是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);

 運行結果:

 

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

<!--
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)@{}在做比較的時候 可以用轉義 如< &lt; 大於> &rt;

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


這樣做同樣是可以顯示左邊是用戶名,右邊是用張三。數據綁定也是可以實現這樣的效果,只要左邊一個布局,右邊一個布局就可以了,而且用的都是同一個user布局,只是加載兩遍,數據是按照list方式傳入,數據綁定的好處有很多,比如說:listview中的點擊事件,對於item的點擊就不說了,難點一般都是item里的一個小控件,我們往往就還要再寫接口等用回調的方法證明它被點擊了,而這個數據綁定就簡單了,直接加上name,那么你點擊的是哪一個用戶名就會顯示出來,下面寫一寫代碼來捋一捋思路,具體寫法如下:
這個和上面代碼有很多一樣的地方,但為了方便你們看,我重新粘貼一遍
  • 首先還是寫一個model類Users,這里面我加上了點擊事件,獲取上下文用view.getContext()。
  • 與Users對應的user_layout.xml文件
  • 一個總得xml文件,用來加載兩列user_layout文件
  • Activity中加載數據

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要改一下,類要加載進來,這就是規范。需要注意的是在List<Users>中的(<)符號是不能寫的,要這樣轉義type="java.util.List&lt;Users&gt;    app:user="@{ users[0] }"是加載數據,如果你們打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一下就好了,

 Android數據綁定技術二,企業級開發


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM