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
————————————————
版权声明:本文为CSDN博主「lywyb112」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liulanzaijia/article/details/89512487

posted @ 2020-05-31 20:47  情三  阅读(2541)  评论(0编辑  收藏  举报