くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

KotlinでDataBindingをはじめるときの簡単なメモ

ひさびさにKotlinしたらDataBindingで悩んだので、その時の備忘録。

Gradle

要点のみ。kaptを使う。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt' // For DataBinding

android {
    dataBinding { // Enable DataBinding Library
        enabled = true
    }
}
dependencies {
    // DataBinding with Kotlin
    kapt 'com.android.databinding:compiler:3.1.4'
}

ObservableField/BaseObserval

ObservableFieldを使う場合、kotlinのdata classが使える。

data class Book(
    val title: ObservableField<String>,
    val price: ObservableInt
)

BaseObservableを使う場合は、setter/getterをカスタムする

class Book : BaseObservable() {
    @get:Bindable
    var title: String = ""
        @Bindable set(title) {
            field = title
            notifyPropertyChanged(BR.title)
        }

    @get:Bindable
    var price: Int = 0
        @Bindable set(price) {
            field = price
            notifyPropertyChanged(BR.price)
        }
}

setContentView

これは特にJavaと違うとこはなし。

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

BindingAdapter

BindingAdapterには、companion object + @JvmStaticを使う。
kotlinにはstatic methodがないので、@JvmStaticがないと認識されない。

object CustomBindingAdapter {
    @BindingAdapter("android:paddingLeft")
    @JvmStatic // ←これがいるらしい
    fun setBindHogeHoge(view: View, value: Int) {
        // ・・・
    }
}

以上!!

参考にしたサイト様