Androidアプリの開発を始めて、Databindingが便利そうというかMVVMなどのアーキテクチャで実装しようとすると必須?みたいなので、とりあえず簡単なサンプルアプリを実装して、どんなものか簡単に実装を理解しようとした。
アプリを書き終わったのでビルドしようとすると Unresolved reference: BR
というエラーに出くわしてしまった。
結論から言うと、
(Module: app) build.gradle に apply plugin: 'kotlin-kapt' の記載を書いたら解決した。
経緯
Googleのドキュメントを見る限り、 (Module: app) build.gradleに、
android { .... dataBinding { enabled = true } }
を書くだけでデータバインディングの準備はOKなのかなと思っていた。
そのため、以下のようにViewHolderクラスで ViewDataBinding
に変数をセットするコードを書いてビルドしてみるとエラーになった。
class WeatherViewHolder(val binding: ViewDataBinding) : RecyclerView.ViewHolder(binding.root) { fun bind(data: Any) { binding.setVariable(BR.data, data) // ここで kotlin compiler にUnresolved reference: BR と表示された binding.executePendingBindings() } }
どうやら、BRクラスファイルの参照解決ができてないということで、 うーんとうなりながらぐぐってみると以下の記事に行き着きました。
どうやらこいつが必要らしい。
apply plugin: 'kotlin-kapt'
ということで、build.gradleに記載してビルドしてみるとすんなりエラーなくビルドできました。
いろいろ昔の記事を見ていると、
kapt 'com.android.databinding:compiler:x.x.x'
を書いてる記事とかあるんだけど、これはもう書かなくて良いっぽい。
最後に
不慣れなことをすると、すぐバグ踏んだり躓いたりしやすいから、早く慣れていきたい。 友達とサービス作るときに、キダくんAndroidアプリ開発で参加してよ!って声がいっぱいかかるぐらいにはスキルアップしていくぞ!