天天看點

官方Databinding常用的一些方法一.公用的實體類工具類二.Mainactivity.java三.SecondActivity.java四.ThirdActivity.java五.FourActivitiy.java

一.公用的實體類工具類

Animal.java

package com.example.administrator.databindtext12225;

import android.databinding.ObservableField;
import android.databinding.ObservableInt;


public class Animal {
    public final ObservableField<String> field = new ObservableField<>();
    public final ObservableInt age = new ObservableInt();
}
           

user.java

package com.example.administrator.databindtext12225;

import android.databinding.BaseObservable;
import android.databinding.Bindable;

/**
 * Created by Administrator on 2016/12/25 0025.
 */
public class User extends BaseObservable{
    private String name;
    private String address;
    private int age;
    @Bindable
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        //和bindable配對使用
//        notifyPropertyChanged(com.example.administrator.databindtext.BR.name);
        notifyPropertyChanged(com.example.administrator.databindtext12225.BR.name);
    }
    @Bindable
    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
        notifyPropertyChanged(com.example.administrator.databindtext12225.BR.address);
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
           

other/user.java

package com.example.administrator.databindtext12225.other;

import android.databinding.BaseObservable;

/**
 * Created by Administrator on 2016/12/25 0025.
 */
public class User extends BaseObservable{
    private String daxiongName;
    private String daxiongAddress;
    private int daxiongAge;
    public String getDaxiongName() {
        return daxiongName;
    }

    public void setDaxiongName(String daxiongName) {
        this.daxiongName = daxiongName;
    }

    public String getDaxiongAddress() {
        return daxiongAddress;
    }

    public void setDaxiongAddress(String daxiongAddress) {
        this.daxiongAddress = daxiongAddress;
    }

    public int getDaxiongAge() {
        return daxiongAge;
    }

    public void setDaxiongAge(int daxiongAge) {
        this.daxiongAge = daxiongAge;
    }
}
           

//student.java

import android.databinding.BaseObservable;
import android.databinding.ObservableBoolean;
import android.databinding.ObservableField;

/**
 * Created by Administrator on 2016/12/25 0025.
 */
public class Student extends BaseObservable{
    public ObservableField<String> stuName = new ObservableField<>();
    public ObservableBoolean isMan = new ObservableBoolean();
    private String stuAge;


    public String getStuAge() {
        return stuAge;
    }

    public void setStuAge(String stuAge) {
        this.stuAge = stuAge;
    }
}
           

MyAdapter.java

package com.example.administrator.databindtext12225;

import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;

/**
 * Created by Administrator on 2016/12/25 0025.
 */
public class MyAdapter extends RecyclerView.Adapter {

    private ArrayList<Student> mData = new ArrayList<>();

    public  MyAdapter(ArrayList<Student> data) {
        mData.addAll(data);
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ViewDataBinding binding = DataBindingUtil.inflate(LayoutInflater
                .from(parent.getContext()), R.layout.item_recycleview, parent, false);
       ViewHolder holder = new ViewHolder(binding.getRoot());
        holder.setBinding(binding);
        return holder;
    }

    /**
     * ViewDataBinding是我們之前用的那些binding的父類,隻有自動生成的那些子類才會有setXXX方法,那現在我們需要在ViewDataBinding中設定變量咋辦?這個類為我們提供了setVariable去設定變量,第一個參數是我們的變量名的引用,第二個是我們要設定的值
     *當資料改變時,binding會在下一幀去改變資料,如果我們需要立即改變,就去調用executePendingBindings方法
     *  */
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ((ViewHolder)holder).getBinding().setVariable(com.example.administrator.databindtext12225.BR.stu,mData.get(position));
        ((ViewHolder)holder).getBinding().executePendingBindings();
        ((ViewHolder)holder).getBinding().setVariable(com.example.administrator.databindtext12225.BR.drawableId,R.mipmap.ic_launcher);
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder {

        private ViewDataBinding binding;

        public ViewHolder(View itemView) {
            super(itemView);
        }

        public void setBinding(ViewDataBinding binding) {
            this.binding = binding;
        }

        public ViewDataBinding getBinding() {
            return this.binding;
        }
    }
}
           

Utill.java

package com.example.administrator.databindtext12225;

import android.databinding.BindingAdapter;
import android.widget.ImageView;

/**
 * Created by Administrator on 2016/12/25 0025.
 */
public class Utils {
    @BindingAdapter({"bind:image"})
    public static void imageLoader(ImageView imageView, int  drawableId) {
        imageView.setBackgroundResource(drawableId);
    }
}
           

二.Mainactivity.java

/**
 * 這裡主要寫的是怎麼把
 * 1.對象  和 基本資料類型  跟view綁定
 * 2.給include的布局  傳遞對象
 * [email protected]{user.displayName ?? user.lastName  如果不是null  就是自身,如果是null就是user.lastName
 * 4.
 * <TextView android:layout_width="wrap_content"
 * android:layout_height="wrap_content"
 * android:text="@{user.firstName, default=超哥}"/>
 * 5.如何 import 相同類名的class
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private User mUser;
    private com.example.administrator.databindtext12225.other.User mOtherUser;
    private ActivityMainBinding mBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        mUser = new User();
        mUser.setName("超哥");
        mUser.setAddress("北一峰");

        mOtherUser = new com.example.administrator.databindtext12225.other.User();
        mOtherUser.setDaxiongName("我是大雄");
        mOtherUser.setDaxiongAddress("南一峰");

        mBinding.setUser(mUser);
        mBinding.setOtheruser(mOtherUser);

        //editText 輸入完成改變對象
        mBinding.btOtherUserConfirm.setOnClickListener(this);
        mBinding.btUserConfirm.setOnClickListener(this);

        //跳轉到SecondActivity
        mBinding.btJump.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if (view == mBinding.btUserConfirm) {
            System.out.println("xcqw btUserConfirm   name" + mBinding.etUserName.getText().toString() + "  address  " + mBinding.etUserAddress.getText().toString());
//        方法1:    這種不會立即改變View  (user沒有繼承baseObservale)
//            mUser.setName(mBinding.etUserName.getText().toString());
//            mUser.setAddress(mBinding.etUserAddress.getText().toString());

//        方法2:  這種就會立即改變View(也就是重新設定一個user)
//            User user = new User();
//            user.setName(mBinding.etUserName.getText().toString());
//            user.setAddress(mBinding.etUserAddress.getText().toString());
//            mBinding.setUser(user);

//        方法3:    會立即改變View
//            1.user extends baseobservable
//            2.在get方法上@bindable
//            3.在set方法notifyPropertyChanged
            mUser.setName(mBinding.etUserName.getText().toString());
            mUser.setAddress(mBinding.etUserAddress.getText().toString());


        } else if (view == mBinding.btOtherUserConfirm) {
//        方法1:  這種不會立即改變View
//            System.out.println("xcqw btOtherUserConfirm  name"+mBinding.etOtherUserName.getText().toString()+"  address  "+mBinding.etOtherUserAddress.getText().toString());
//            mOtherUser.setDaxiongName(mBinding.etOtherUserName.getText().toString());
//            mOtherUser.setDaxiongAddress(mBinding.etOtherUserAddress.getText().toString());

//        方法2:  這種就會立即改變View
            com.example.administrator.databindtext12225.other.User user = new com.example.administrator.databindtext12225.other.User();
            user.setDaxiongName(mBinding.etOtherUserName.getText().toString());
            user.setDaxiongAddress(mBinding.etOtherUserAddress.getText().toString());
            mBinding.setOtheruser(user);

        } else if (view == mBinding.btJump) {
            startActivity(new Intent(MainActivity.this, SecondActivity.class));
        }
    }
}
           

Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:bind="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

        <variable
            name="user"
            type="com.example.administrator.databindtext12225.User">
        </variable>

        <!--因為type="User"都為User類,會導緻不知道到那個包,是以可以通過alias屬性重命名type的類型-->
        <import
            alias="Other"
            type="com.example.administrator.databindtext12225.other.User"/>

        <variable
            name="otheruser"
            type="Other">
        </variable>

    </data>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include
            layout="@layout/include_layout"
            bind:user="@{user}"
            />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            tools:context="com.example.administrator.databindtext12225.MainActivity">

            <TextView
                android:id="@+id/tv_user_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{`userName`+user.name}"/>

            <TextView
                android:id="@+id/tv_user_address"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{`userAddress`+user.address}"/>
        </LinearLayout>


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            tools:context="com.example.administrator.databindtext12225.MainActivity">

            <TextView
                android:id="@+id/tv_other_user_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{`otherUserName`+otheruser.daxiongName}"/>

            <TextView
                android:id="@+id/tv_other_user_address"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{`otherUserAddress`+otheruser.daxiongAddress}"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">


            <EditText
                android:id="@+id/et_user_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="請輸入user的name"/>

            <EditText
                android:id="@+id/et_user_address"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="請輸入user的address"/>

            <Button
                android:id="@+id/bt_user_confirm"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="确認輸入,改變userView"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">


            <EditText
                android:id="@+id/et_other_user_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="請輸入otheruser的name"/>

            <EditText
                android:id="@+id/et_other_user_address"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="請輸入otheruser的address"/>

            <Button
                android:id="@+id/bt_other_user_confirm"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="确認輸入,改變otherUserView"/>
        </LinearLayout>

        <Button
            android:id="@+id/bt_jump"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="跳到SecondActivity"/>

    </LinearLayout>
</layout>
           

三.SecondActivity.java

**
 * 1.一些特殊字元的轉義,<String>    左右尖括号的寫法
 * 2.對象綁定的另外一種方法 屬性都用observal
 * 3.arrayList,map綁定的方法
 * 4.map的兩種寫法
 * normalMap.get(`age`)
 * map[`name`]
 * 5.在布局檔案中可以用``拼接字元串
 * */
public class SecondActivity extends AppCompatActivity {

    private ActivitySecondBinding mBinding;
    private ObservableArrayList<com.example.administrator.databindtext12225.other.User> arrayList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = DataBindingUtil.setContentView(SecondActivity.this, R.layout.activity_second);

//第一部分  普通的寫法不會直接互相綁定
//        final ArrayList<String> normalList = new ArrayList<>();
//        normalList.add("first");
//        normalList.add("second");
//        mBinding.setNormalList(normalList);
//
//        final Map<String, String> normalMap = new HashMap<>();
//        normalMap.put("name", "zhangsan");
//        normalMap.put("age", "40");
//        mBinding.setNormalMap(normalMap);
//
//        final String[] normalArrays = {"lisi", "laowang"};
//        mBinding.setNormalArrays(normalArrays);

        //第二部分 這麼寫才會互相綁定
        final Animal animal = new Animal();
        animal.field.set("cat");
        animal.age.set(2);
        mBinding.setAnimal(animal);

        arrayList = new ObservableArrayList<>();
        for (int i=0;i<2;i++){
            com.example.administrator.databindtext12225.other.User user = new com.example.administrator.databindtext12225.other.User();
            user.setDaxiongName("大熊"+i+"号");
            arrayList.add(user);
        }
        mBinding.setUserList(arrayList);


        final ObservableArrayList<String> list = new ObservableArrayList<>();
        list.add("daxiong");
        list.add("daxiong2");
        mBinding.setList(list);

        final ObservableArrayMap<String, String> map = new ObservableArrayMap<>();
        map.put("name","Tom");
        map.put("age","4");
        mBinding.setMap(map);

        mBinding.btChangeValue.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                第一部分  這麼寫不會互相綁定
//                normalList.set(0,"hehe");
//                normalList.set(1,"haha");
//                normalMap.put("name","sam");
//                normalMap.put("age","5");
//                normalArrays[0] = "zhaosi";


                //第二部分
                //作用類型  對象的bindable
                animal.field.set("dog");
                animal.age.set(4);
                list.set(0,"cat");
                list.set(1,"dog");
                map.put("name","Sam");
                map.put("age","5");
                //other/user中的屬性需要加上  notifyPropertyChanged(BR.daxiongName); 才會生效,否則沒用
                arrayList.get(0).setDaxiongName("大熊一号改裝過");
                arrayList.get(1).setDaxiongName("大熊二号改裝過");
            }
        });
        mBinding.btJumpThirdactivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(SecondActivity.this,ThirdActivity.class));
            }
        });
    }

}
           

Activity_second.xml

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.administrator.databindtext12225.SecondActivity">

    <data>
        <import type="java.util.ArrayList" />
        <import type="java.util.Map" />
        <import type="java.lang.String" />
        <import type="com.example.administrator.databindtext12225.other.User" />
        <variable
            name="secondActivity"
            type="com.example.administrator.databindtext12225.SecondActivity">
        </variable>




        <!--第一部分-->

        <variable
        name="normalList"
        type="ArrayList<String>"/>

        <!--泛型的支援會在編譯時期報紅線,但是是可以直接運作的
        但是需要通過轉義字元才行,如:<資料類型> 或者<資料類型>-->
        <!--< <  > >   貌似這個gt可以直接用>  但是<必須被替換-->


        <variable
        name="normalMap"
        type="Map<String,String>" />

        <variable
        name="normalArrays"
        type="String[]" />


        <!--第一部分結束-->

        <!--這麼寫一直報錯,非要寫的跟下面一樣,把user拿出去!!!!-->
        <!--<variable-->
            <!--name="user"-->
            <!--type="com.example.administrator.databindtext12225.User">-->
        <!--</variable>-->
        <variable
            name="user"
            type="User">
        </variable>

        <variable
            name="animal"
            type="com.example.administrator.databindtext12225.Animal">
        </variable>

        <variable
            name="userList"
            type="android.databinding.ObservableArrayList<User>"/>

        <variable
            name="list"
            type="android.databinding.ObservableArrayList<String>"/>

        <variable
            name="map"
            type="android.databinding.ObservableArrayMap<String,String>"/>


    </data>


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

<!--第一部分-->
    <!--<TextView-->
    <!--android:layout_width="wrap_content"-->
    <!--android:layout_height="wrap_content"-->
    <!--android:text="@{normalList[0]}"/>-->

    <!--<TextView-->
    <!--android:layout_width="wrap_content"-->
    <!--android:layout_height="wrap_content"-->
    <!--android:text="@{normalList[1]}"/>-->
    <!--<!–!!!!! `````這個符号可以憑借字元串–>-->
    <!--<TextView-->
    <!--android:layout_width="wrap_content"-->
    <!--android:layout_height="wrap_content"-->
    <!--android:text="@{normalMap.get(`age`)}"/>-->
    <!--<TextView-->
    <!--android:layout_width="wrap_content"-->
    <!--android:layout_height="wrap_content"-->
    <!--android:text="@{normalArrays[0]}"/>-->
    <!--第一部分結束-->


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{`animal.filed`+animal.field}" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{`animal.age`+String.valueOf(animal.age)}" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{`list[0]`+list[0]}" />
    <!--Map集合既可以通過map[key]的方式,也可以通過調用API-->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{`list[1]`+list[1]}" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{`map[name]`+map[`name`]}" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{`otheruserList[0]name`+userList[0].getDaxiongName}" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{`otheruserList[1]name`+userList[1].getDaxiongName}" />
    <Button
        android:id="@+id/bt_change_value"
        android:layout_width="wrap_content"
        android:text="改變資料"
        android:layout_height="wrap_content" />
<Button
    android:id="@+id/bt_jump_thirdactivity"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="跳到ThirdActivity"/>

</LinearLayout>



</layout>
           

四.ThirdActivity.java

/**
 * 1.點選事件的幾種寫法
 * */
public class ThirdActivity extends AppCompatActivity {

    private ActivityThirdBinding mBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = DataBindingUtil.setContentView(ThirdActivity.this, R.layout.activity_third);
        User user = new User();
        user.setName("我是第三個Activity");
        mBinding.setUser(user);


//        第二種點選事件寫法
        mBinding.setClickEvent(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(ThirdActivity.this, "xcqw 我是第二種點選事件寫法", Toast.LENGTH_SHORT).show();
            }
        });
//        第三種點選事件寫法
        mBinding.setMyEvent(new MyEventListener() {
            @Override
            public void clickEventOne(View view) {
                Toast.makeText(ThirdActivity.this, "xcqw 我是第三種寫法  clickEventOne", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void clickEventTwo(View view) {
                Toast.makeText(ThirdActivity.this, "xcqw 我是第三種寫法  clickEventTwo", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void clickEventThree(User user) {
                Toast.makeText(ThirdActivity.this, "xcqw 我是第三種寫法  clickEventTwo username"+user.getName(), Toast.LENGTH_SHORT).show();
            }
        });

        mBinding.btJumpFouractivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(ThirdActivity.this,FourActivity.class));
            }
        });
    }

    public void firstMethodClick(View view){
//        這種傳統的點選事件寫法還有好幾種
        Toast.makeText(ThirdActivity.this, "xcqw 我是第一種寫法 firstMethodClick", Toast.LENGTH_SHORT).show();
    }
}
           

Activity_third.java

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.administrator.databindtext12225.SecondActivity">

    <data>
        
        <variable
            name="view"
            type="android.view.View">
        </variable>
        
        <variable
            name="user"
            type="com.example.administrator.databindtext12225.User"/>

        <variable
            name="clickEvent"
            type="android.view.View.OnClickListener"
            />

        <variable
            name="myEvent"
            type="com.example.administrator.databindtext12225.MyEventListener"/>

    </data>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >

        <Button
            android:id="@+id/bt_first_method"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="firstMethodClick"
            android:text="第一種傳統寫法"/>
        <Button
            android:id="@+id/bt_second_method"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@{clickEvent}"
            android:text="第二種點選方式"/>
        <Button
            android:id="@+id/bt_third_method"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@{myEvent.clickEventOne}"
            android:text="第三種新式寫法"/>
<!--不知道() -> myEvent.clickEventThree(user) 代表什麼意思-->
        <Button
            android:id="@+id/bt_third_method_two"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@{() -> myEvent.clickEventThree(user)}"
            android:text="第三種新式寫法有入參"/>

        <Button
            android:id="@+id/bt_jump_fouractivity"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="跳到fourActivity"/>
    </LinearLayout>



</layout>
           

五.FourActivitiy.java

package com.example.administrator.databindtext12225;

import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;

import com.example.administrator.databindtext12225.databinding.ActivityFourBinding;

import java.util.ArrayList;
/**
 * 1.recycleView
 * 2.自定義binding de set方法
 *      (1)現在utils方法寫一個@BindingAdapter({"bind:image"})
             public static void imageLoader(ImageView imageView, int  drawableId) {
             imageView.setBackgroundResource(drawableId);
        (2)然後在布局裡面用上
             <variable
             name="drawableId"
             type="int" />


             <ImageView
             android:id="@+id/img"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             app:image="@{drawableId}"/>
        (3)實際用的地方
            ((ViewHolder)holder).getBinding().setVariable(com.example.administrator.databindtext12225.BR.drawableId,R.mipmap.ic_launcher);

// @BindingAdapter({"bind:imageUrl", "bind:error"})
// public static void loadImage(ImageView view, String url, Drawable error) {
// Picasso.with(view.getContext()).load(url).error(error).into(view);
// }

 * */
public class FourActivity extends AppCompatActivity {

    private ActivityFourBinding mBinging;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_four);
        mBinging = DataBindingUtil.setContentView(FourActivity.this, R.layout.activity_four);
        mBinging.recycle.setLayoutManager(new LinearLayoutManager(this,
                LinearLayoutManager.VERTICAL, false));

        final ArrayList<Student> mData = new ArrayList<>();
        for (int i = 0;i<10;i++){
            Student stu = new Student();
            stu.stuName.set("我是學生    "+i);
            mData.add(stu);
        }
        mBinging.recycle.setAdapter(new MyAdapter(mData));
        mBinging.btChangeData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mData.get(4).stuName.set("hahahhahaha");
                //普通寫法是沒用
                //1  stu 中寫bindable
                //2  把String  寫成 observableField<String>
            }
        });
    }
}
           

Activity_four.xml

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.administrator.databindtext12225.FourActivity">

    <data>

    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.v7.widget.RecyclerView>

    <Button
        android:id="@+id/bt_change_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="點我改變資料"/>
    </LinearLayout>

</layout>
           

源碼下載下傳