Kotlin之Databinding的配置和使用

一.新建Kotlin项目:

二.在项目的build.gradle中配置,主要加入两个全局变量的版本号:

buildscript {
    //主要加入两个全局变量的版本号
    ext.kotlin_version = '1.2.61'
    ext.gradle_version = '3.2.0'//gradle版本
    repositories {
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir

三.在模块app中的build.gradle中配置:

这边主要加入三个配置:

1.apply plugin'kotlin-kapt'//kapt 插件

2.//开启dataBinding
    dataBinding {
        enabled true

    }

3.kapt "com.android.databinding:compiler:$gradle_version”//这里databinging使用跟gradle一样的版本号

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'//kapt 插件

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.linwb.kotlindatabingdemo"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    //开启dataBinding
    dataBinding {
        enabled = true
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    "com.android.databinding:compiler:$gradle_version"
    implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

注意:

kapt "com.android.databinding:compiler:$gradle_version” 如果AndroidStudio是3.2以上版本,就不用使用kapt,直接"com.android.databinding:compiler:$gradle_version” ,不然编译时会报异常:

[kapt] An exception occurred: java.lang.NullPointerException

这是因为:Android studio 3.2.0-beta01开始,数据绑定不再需要在gradle文件中声明其注释处理器依赖项,因为数据绑定能够解析其依赖性。

四.到这里Databinding的配置就好了,这时候我们来验证一下:

1.我们修改布局文件:activity_main.xml,布局文件这里一定要改成layout开始的才行:

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

    <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="hello word"/>
    </LinearLayout>
</layout>

2.然后我们来看下MainActivity:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        DataBindingUtil.setContentView<ActivityMainBinding>(this,R.layout.activity_main)
    }
}

这里如果没有配置和Databinging会提示找不到 ActivityMainBinding,也就是如果配置好Databinging,项目会自动生成ActivityMainBinding文件。

五.  Databinding的使用:

我们知道Databinding的作用就是数据绑定,去掉了activity和fragment中更新ui数据的代码,让业务逻辑和ui代码分离;减少定义view id 和使用findViewById()。接下来我们就看下怎么使用它:

1.我们先建一个数据实体类:

package com.example.linwb.kotlindatabingdemo

class Person(val name: String, val sex: String){}

2.在布局文件中使用数据:

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

    <data>
        <variable
            name="person"
            type="com.example.linwb.kotlindatabingdemo.Person" />
    </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:layout_gravity="center_horizontal"
            android:text="@{person.name}"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="@{person.sex}"/>
    </LinearLayout>
</layout>

3.在activity中使用:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val dataBinding = DataBindingUtil.setContentView<ActivityMainBinding>(this,R.layout.activity_main)
        dataBinding.person = Person("yiyi","women")

    }
}

项目地址:

https://github.com/linwenbing/KotlinDatabindingDemo.git

猜你喜欢

转载自blog.csdn.net/liulanzaijia/article/details/89512487