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