Android JetPack——DataBinding

DataBinding的作用是直接让实体类的和布局中控件绑定,不需要代码中设置,只需给布局设置对象即可。

  1. DataBinding支持
android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.study"
        minSdkVersion 22
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    //需要添加DataBinding支持
    dataBinding {
        enabled = true
    }
}

使用之前需要添加DataBinding支持。Kotlin项目需要另外的配置。目前Demo项目是Java项目,不过是Java和Kotlin混合使用。

  1. 新建一个实体类
    Book,书名、作者名两个属性,一个构造方法。
class Book {
    var name: String
    var author: String

    constructor(name: String, author: String) {
        this.name = name
        this.author = author
    }
}
  1. 布局样式
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".activity.jetpack.DataBandingActivity">

    <data>

        <variable
            name="Book"
            type="com.example.study.jetpack.model.Book" />
    data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <Button
            android:id="@+id/bt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="获取数据"
            />
        <TextView
            android:id="@+id/tv_name"
            android:layout_width="wrap_content"
            android:text='@{Book.name}'
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/tv_author"
            android:layout_width="wrap_content"
            android:text='@{Book.author}'
            android:layout_height="wrap_content" />
    LinearLayout>
layout>

和以往不同,根布局是layout标签。variable标签中指定实体类和名称,如果实体类名称有重复的情况,可以指定别名。

  1. Activity中使用
class DataBindingActivity : BaseActivity(), View.OnClickListener {


    companion object {
        fun start(context: Context) {
            val intent = Intent(context, DataBindingActivity::class.java)
            context.startActivity(intent)
        }
    }
    //实体类对象
    lateinit var book: Book
    //布局构建的dataBanding对象
    lateinit var dataBinding: ActivityDataBandingBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        dataBinding= DataBindingUtil.setContentView(this, R.layout.activity_data_banding)
        book = Book("呐喊", "鲁迅")
        //设置对象
        dataBinding.book = book
        bt.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        //点击重新赋值对象
        dataBinding.book = Book("射雕英雄传", "金庸")
    }
}

布局建好之后,build一下就会生成一个ActivityDataBindingBinding文件,需要的就是实例化它并设置具体的数据。

和之前的使用也是很像的。注意布局和实例化DataBinding对象即可。
还有很多其它的功能,比如设置数据的时候怎么拼接字符串之类。
感觉也有些不好的地方,布局,实体类,获取数据的部分,看代码逻辑的话需要三部分来回切换了。

你可能感兴趣的:(Android进阶,Android,JetPack,面试)