Android DataBinding的使用

DataBinding函數(shù)庫的引入方式:
android {
    ......
    dataBinding{
        enabled = true
    }
}
DataBinding的布局文件
  • 以layout為根布局標(biāo)簽,包含data和view兩個標(biāo)簽
  • data標(biāo)簽用來實(shí)現(xiàn)數(shù)據(jù)綁定
  • view標(biāo)簽就是布局
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="bookitem"
            type="com.example.firstpro.model.BookItem" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:text="@{bookitem.mName}" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginTop="20dp"
            android:text="@{bookitem.mTitle}" />
    </LinearLayout>
</layout>

注:
bookitem:屬性變量,類型為BookItem的Java類
@{bookitem.mName}:將控件的值和bookitem的成員變量聯(lián)系在一起

數(shù)據(jù)對象
/**
 * @author Administrator
 */
public class BookItem implements Parcelable {
    public final  String mName;
    public final String mLastTime;
    public final String mTitle;
    public final String mPath;

    public BookItem(String mName, String mLastTime, String mTitle, String mPath) {
        this.mName = mName;
        this.mLastTime = mLastTime;
        this.mTitle = mTitle;
        this.mPath = mPath;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.mName);
        dest.writeString(this.mLastTime);
        dest.writeString(this.mTitle);
        dest.writeString(this.mPath);
    }
    protected BookItem(Parcel in) {
        this.mName = in.readString();
        this.mLastTime = in.readString();
        this.mTitle = in.readString();
        this.mPath = in.readString();
    }

    public static final Parcelable.Creator<BookItem> CREATOR = new Parcelable.Creator<BookItem>() {
        @Override
        public BookItem createFromParcel(Parcel source) {
            return new BookItem(source);
        }

        @Override
        public BookItem[] newArray(int size) {
            return new BookItem[size];
        }
    };
}

數(shù)據(jù)綁定
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);

        BookItem book = new BookItem("你好", "2018-7-24", "Test", "../../../img");
        binding.setBookitem(book);
    }
事件綁定

xml中的綁定代碼:

  <data>
        <variable
            name="bookitem"
            type="com.example.firstpro.model.BookItem" />
        <variable
            name="click"
            type="com.example.firstpro.MainActivity" />
    </data>

事件處理類:

    public void onClickName(View view) {
        Toast.makeText(view.getContext(), book.mName, Toast.LENGTH_SHORT).show();
    }

    public void onClickTitle(View view) {
        Toast.makeText(view.getContext(), book.mTitle, Toast.LENGTH_SHORT).show();
    }

注意
需要添加

binding.setClick(this);

完整的Activity:

public class MainActivity extends AppCompatActivity {

    BookItem book = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);

        book = new BookItem("你好", "2018-7-24", "Test", "../../../img");
        binding.setBookitem(book);
        binding.setClick(this);
    }


    public void onClickName(View view) {
        Toast.makeText(view.getContext(), book.mName, Toast.LENGTH_SHORT).show();
    }

    public void onClickTitle(View view) {
        Toast.makeText(view.getContext(), book.mTitle, Toast.LENGTH_SHORT).show();
    }
}

111.png
222.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android的databinding已經(jīng)出來好久了,一直也沒有用到項目中,這兩天在郭霖的公眾號上看到分析data...
    wutongke閱讀 9,794評論 8 32
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,034評論 25 709
  • 二十號本準(zhǔn)備下午一點(diǎn)鐘起來洗個頭收拾一下再去上班。不料負(fù)責(zé)另個區(qū)域打秤的好友在一點(diǎn)前給我打了個電話。這波電...
    萄_e767閱讀 339評論 1 0
  • 隨著現(xiàn)在經(jīng)濟(jì)的發(fā)達(dá),我們在馬路上可以看到越來越多的肥胖者。超重和肥胖癥在一些發(fā)達(dá)國家和地區(qū)人群中的患病率已達(dá)到流行...
    c4627352b2c8閱讀 341評論 0 3
  • 筆記: 一、課程的設(shè)計 1.分享互聯(lián)網(wǎng)營銷的策劃和營銷定位的知識。 2.在工作中,操作項目,運(yùn)作產(chǎn)品,以及進(jìn)行品牌...
    浩子古小浩閱讀 480評論 0 0

友情鏈接更多精彩內(nèi)容