2015年5月30日 星期六

Android 開發 (九十七) android studio 1.13 databinding part1

databinding 之前在寫windows的時候就用過,由於非常好用,
所以一直期待android 也可以support,如今android studio 1.13 support了這個功能!!

現在就來介紹如何使用

首先必須先將android studio升級到1.13
接下來必須在專案的 build.gradle裡加入
classpath 'com.android.databinding:dataBinder:1.0-rc0'

接下來必須在app的build.gradle裡加入
apply plugin: 'com.android.databinding'

然後就可以在app裡使用databinding的功能了

<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android">    <data>        <variable name="user" type="com.designsupportlibrary.normaldatabinding.NormalUser"/>    </data>    <LinearLayout        android:orientation="vertical"        android:layout_width="match_parent"        android:layout_height="match_parent">        <EditText android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@{user.firstName}"/>        <EditText android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@{user.lastName}"/>        <Button            android:id="@+id/btn"            android:layout_width="wrap_content"            android:layout_height="wrap_content" />    </LinearLayout></layout>

如上面的xml file data代表著要連動的model
這代表著我們有一個 user class

public class NormalUser  {
    private String firstName;    private String lastName;
    public String getFirstName() {
        return firstName;    }
    public String getLastName() {
        return lastName;    }

    public NormalUser(String firstName, String lastName) {
        this.firstName = firstName;        this.lastName = lastName;    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

接著我們只需要將normalUser 與 ui 做綁定的動作即可
    NormalMainBinding binding;
    NormalUser user;

    @Overrideprotected
    void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.normal_main);
        user = new NormalUser("Test", "User");
        binding.setUser(user);
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(), user.getLastName(), Toast.LENGTH_SHORT).show();
            }
        });
    }

所以這邊代表的意思就是,
首先我們會create一個binding的物件,他與view做綁定,但是我們還沒有將data餵給他
接著我們init User ,然後使用setUser 將 view 與 資料綁定

這時候 上方的edittext 就會去取得 firstName的資料
而下方的edittext就會去取得 lastName的資料,

不過目前的綁定方法就只有set下去的瞬間而已,之後你再對user做任何的改變都不會有其他相對應的變化了,如果要有相對應的變化,那就必須針對User做額外的動作,
不過這個就得等到part2 的時候再說囉XD

沒有留言:

張貼留言