前言:
前几天导师叫我去学DataBinding,正好赶上这几天把以前放弃的Kotlin重新拾起(Kotlin的春天要来了?),所以就想到用Kotlin上使用DataBinding,前期踩了好多的坑(下面我会列出我踩到的坑,并提供解决办法),然后去看了点视频,学习了一些入门的使用,DataBinding相比Kotlin-android-extensions 来说,优点更多,在我理解,将它俩结合来用,就两个子绝了 , 总而言之学就完了(导师常说的话)。
1.安装DataBinding
Install DataBinding in Java:
在java环境下安装DataBinding很简单,只需要在Moudle的build.gradle的android{}里添加dataBinding.enable = true即可如下图:
install DataBinding in Kotlin:
要想在Kotlin上使用DataBinding可能会踩很多的坑,不过总体安装步骤如下:
1.安装Kotlin语言环境(不会的请左转百度)
2.配置project的build.gradle
buildscript{
ext.android_plugin_version = AndroidStudio版本号
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:#kotlin_version"
}
Moudle 的 build.gradle
apply plugin: 'kotlin-kapt' (这行要写在上面)
android{
dataBinding.enable = true
}
kapt{
enable = ture
}
dependencies{
kapt "com.android.databinding:compiler:$android_plugin_version"
}
配置完毕后如下图所示
Moudle的build.gradle
Project下的build.gradle:
2.容易踩到的坑
问题:Data Binding annotation processor version needs to match the Android Gradle Plugin version. You can remove the kapt dependency com.android.databinding:compiler:2.1.0 and Android Gradle Plugin will inject the right version.
解决办法:将Kotlin_plugin_version的版本升级,直接改参数就好,我使用的是3.1.2
还有些问题就不说了,基本按照上面的方法配置的就不会有错,可能会提示如下:但是那个可以忽略,不影响开发。如果有错误,看一看配置是不是缺了什么。
3.DataBinding初体验
首先我们需要在Layout布局中增加外层的布局<layout></layout>并且把我们的xmlns放在这个布局中,我们的布局就写好了如下图,此时一定要重构一下,不然不会生成Binding类
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Main2Activity"> </LinearLayout> </layout>
之后我们需要在Activity的类中声明我们的Binding类,来进行后续的操作。
这样我们就完成了layout与Activity的绑定,接下来我们开始使用它来进行一些爽爆的操作。
我们首先写两个TextView一个EditView,然后并且给他们附上id,然后我们通过binding来给这些控件传值(xml我就不放代码了)。
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) var binding :ActivityMain2Binding = DataBindingUtil.setContentView(this@Main2Activity,R.layout.activity_main2) binding.xd.text = "haha" //使用了dataBinding xd.text = "Nixo" // 使用了kotlin-android-extensions }
这样即便不用去绑定控件也可以直接使用控件了。而Kotlin的android-extensions插件同样具有这种功能 前者是通过绑定视图来达到的,而Kotlin插件是通过导入id来实现的。
<- 效果图
这样我们的第一个使用Kotlin+DataBinding的Demo就搞定了。