美文网首页
Android DataBinding的使用

Android DataBinding的使用

作者: wanTag | 来源:发表于2018-07-24 11:58 被阅读53次
DataBinding函数库的引入方式:
android {
    ......
    dataBinding{
        enabled = true
    }
}
DataBinding的布局文件
  • 以layout为根布局标签,包含data和view两个标签
  • data标签用来实现数据绑定
  • view标签就是布局
<?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的成员变量联系在一起

数据对象
/**
 * @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];
        }
    };
}

数据绑定
 @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

相关文章

网友评论

      本文标题:Android DataBinding的使用

      本文链接:https://www.haomeiwen.com/subject/nujemftx.html