• 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

  • 相关阅读:
    防窜货下加密锁使用常见问题
    SQL Server 2000/2005/2008 触发器的管理和查看
    列表显示时,部分凭证会分两行显示,且不能删除
    JDBC 连接 带实例名的SQL Server
    登录软件提示:读取数据源出现错误,pkcs7填充无效,无法被移除
    完美卸载SQL Server 2008的方案
    彻底卸载(删除)SQL server2000
    NCV5取消:授权数到达,或者许可证过期提示的秘诀
    SQL Server日志清空方法 .
    第二天 一列布局
  • 原文地址:https://www.cnblogs.com/qing123/p/13021395.html
Copyright © 2020-2023  润新知