Android DataBinding的使用

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android的databinding已经出来好久了,一直也没有用到项目中,这两天在郭霖的公众号上看到分析data...
    wutongke阅读 9,799评论 8 32
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,057评论 25 709
  • 二十号本准备下午一点钟起来洗个头收拾一下再去上班。不料负责另个区域打秤的好友在一点前给我打了个电话。这波电...
    萄_e767阅读 339评论 1 0
  • 随着现在经济的发达,我们在马路上可以看到越来越多的肥胖者。超重和肥胖症在一些发达国家和地区人群中的患病率已达到流行...
    c4627352b2c8阅读 341评论 0 3
  • 笔记: 一、课程的设计 1.分享互联网营销的策划和营销定位的知识。 2.在工作中,操作项目,运作产品,以及进行品牌...
    浩子古小浩阅读 480评论 0 0

友情链接更多精彩内容