移至Gradle Kotlin DSL构建脚本后,无法解析数据绑定

时间:2019-07-28 12:41:26

标签: android kotlin gradle-kotlin-dsl

我有一个有效的版本,包括数据绑定,但是将Gradle构建脚本迁移到Kotlin DSL之后,每次使用import androidx.databinding.DataBindingUtil时我都遇到无法解决的符号错误

我的build.properties.kts包含以下内容:

plugins {
    id ("com.android.application")
    kotlin ("android")
    kotlin ("android.extensions")
    id ("de.mannodermaus.android-junit5")
}

android {
    lintOptions.isAbortOnError = false

    compileSdkVersion(28)
    defaultConfig {
        // ...
    }
    buildTypes {
        getByName("release") {
            isMinifyEnabled = false
            proguardFiles (getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }
    dataBinding.isEnabled = true

    sourceSets {
        getByName("main").java.srcDir("src/main/kotlin")
        getByName("test").java.srcDir("src/test/kotlin")
    }
}

dependencies {
    // ...
}

dataBinding.isEnabled = true是启用数据绑定的正确方法,还是我需要做其他事情? (我知道我可以回到Groovy来“解决”这个问题,但这有点像放弃!)

6 个答案:

答案 0 :(得分:4)

android {
    ...

    buildFeatures {
        dataBinding = true
    }
...

https://developer.android.com/studio/preview/features?hl=en

答案 1 :(得分:1)

这就是我在kotlin gradle文件中启用dataBinding的方式:

dataBinding {
    isEnabled = true
}

Voila;)

答案 2 :(得分:0)

是:databinding.isEnabled = true 启用数据绑定的正确方法。

问题出在我的文件命名中。迁移到Kotlin DSL时,我无意中将gradle.properties文件重命名为gradle.properties.kts。重命名文件后,我现在又具有完整的功能了!

答案 3 :(得分:0)

,对于ViewBinding,您可以使用:

viewBinding.isEnabled = true

答案 4 :(得分:0)

您可以像这样使用它:

android {

  buildFeatures {
         dataBinding = true

         // for view binding:
         // viewBinding = true
    }
}

答案 5 :(得分:-1)

请尝试以下操作:-

  

成绩文件

apply plugin: 'kotlin-android'                       
apply plugin: 'kotlin-kapt'
android {
    ....
    dataBinding {
        enabled = true
    }
}
dependencies {
    ...
    // notice that the compiler version must be the same than our gradle version
    kapt 'com.android.databinding:compiler:2.3.1'
}
  

您的XML喜欢

<?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"
    >
<!-- Inside the layout tag it is possible to set the data tag in order to set one or many variables. For this example we are having an User property-->
    <data>

        <variable
            name="user"
            type="com.kuma.sample.User"
            />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.kuma.sample.MainActivity"
        >

        <TextView
            android:id="@+id/user_name_text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="16dp"
            android:text="@{user.name}"
            tools:text="Name"
            />

        <TextView
            android:id="@+id/user_age_text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="16dp"
            android:text="@{Integer.toString(user.age)}"
            tools:text="XX"
            />

    </LinearLayout>

</layout>
  

您的活动,例如:-

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        val user = User("Kuma", 23)
        binding.setVariable(BR.user, user)
        binding.executePendingBindings()
    }

}

有关更多信息,请关注here