ひさびさに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) { // ・・・ } }
以上!!