// build.gradle
buildscript {
ext.kotlin_version = '1.2.71'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
// app/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.my.testkotlinmvvm"
minSdkVersion 23
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 {
enabled true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
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'
}
// main_activity.xml
<layout>
<data>
<variable name="model" type="com.my.testkotlinmvvm.MainActivityModel"/>
</data>
<android.support.constraint.ConstraintLayout
.
.
.
</android.support.constraint.ConstraintLayout>
</layout>
// MainActivity.kt
package com.my.testkotlinmvvm
import android.databinding.DataBindingUtil
import android.databinding.ViewDataBinding
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = DataBindingUtil.setContentView<ViewDataBinding>(this, R.layout.main_activity)
val mainActivityModel = MainActivityModel()
binding.setVariable(BR.model, mainActivityModel)
// binding.model = mainActivityModel 도 증상은 같습니다.
}
}
이렇게 하고 컴파일을 하면
binding.setVariable(BR.model, mainActivityModel) 이 부분에서
:app:dataBindingGenBaseClassesDebug
e: /MainActivity.kt: (18, 29): Unresolved reference: BR
이런 에러가 납니다.
java로 MVVM할 때처럼 binding.setModel()도 안되고요.
뭐가 문제일까요?
안드로이드 스튜디오 3.2.1에서 만든 앱니다.
안드로이드 스튜디오 3.2부터는 kapt 로 된거 필요없다그래서 신경 안 쓰고 있었는데, 넣어야 하네요.
// app/build.gradle
apply plugin: 'kotlin-kapt'
.
.
.
dependencies {
...
kapt "androidx.databinding:databinding-compiler:3.2.1"
}
을 넣으니까 잘 됩니다.