我有一个有效的版本,包括数据绑定,但是将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来“解决”这个问题,但这有点像放弃!)
答案 0 :(得分:4)
android {
...
buildFeatures {
dataBinding = true
}
...
答案 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