[Android & Kotlin] View Binding はfindViewByIdの後継

以前は「Kotlin Android Extensions」を使ってコードを簡略化できていましたが非推奨となりました。
View Binding が「大概のケース」でfindViewByIdの後継として使えますが、簡略化されたというわけではありません(今のところ)

Android Studio 4.1.3
API 30

 




View Binding

 
XMLレイアウトファイルからIDを読みだして、findViewById を使ってコードと結びつけるのが昔からの方法です。Kotlinでは kotlinx.android.synthetic を使って簡略化できていましたが、非推奨となりました。

findViewById も色々と不都合なことがあり Jetpack View Binding が推奨されています。

 

 

View Binding の設定

 
Setup1:
build.gradle ファイルに viewBinding 要素を追加し true にします。

同じ名前のファイルが2つあり、プロジェクト用(Project: xxx)とモジュール用(Module: xxx.app)で、モジュール用を使用します。
ターゲットのAPIレベルやライブラリーの情報が設定されます。

 
build.gradle(Module: xxx)

設定後に「Sync Now」を実行するのを忘れずに

as413k 01 - [Android & Kotlin] View Binding はfindViewByIdの後継

Setup2:

Binding Classを生成します。

プロジェクトのXML レイアウトファイルが
activity_main.xml
の場合は、そのレイアウトファイル毎にViewBinding Class を作成

例えば、activity_main.xml の場合はactivity_mainをキャメルケースに変換して、package name とdatabindingを頭に付け、末尾に「Binding」を追加することで生成します。

[package name].databinding.[XMLレイアウトファイル名から]Binding

activity_main.xml >> ActivityMainBinding
sub_layout.xml >> SubLayoutBinding
main.xml >> MainBinding

activity_main.xmが以下のような場合

Binding Class のActivityMainBindingには3つのフィールドがあります。

  • text_view という名前の TextView フィールド
  • edittext という名前の EditText フィールド
  • button という名前の Button フィールド

bindingで以下のように参照できます

ImageViewには ID が無いので、このバインディングクラス内にそのビューへの参照は存在しません。

Binding Classには getRoot() メソッドも含まれるので、レイアウトファイルの
root viewを直接参照できます。上記のActivityMainBindingクラスでは getRoot() により
constraintlayout の root view を返します。

Setup3:
MainActivityの onCreate() で次の手順を実施

  • Binding Classのインスタンスを生成
    • Binding Classに含まれる静的 inflate() メソッドを呼び出し生成
  • getRoot()を呼び出してroot viewへの参照を取得
  • root view を setContentView() に渡す

冗長なので短縮できます

以上で設定ができました。

 

(おまけ)Kotlin Android Extensions

 
非推奨ですが2021年9月までは暫定的に残っているようです。
Android Studio 4.1 以降でどうしても使いたい場合は以下のように設定するとしばらくは使えるようです。

build.gradle (Module: xxx) のpluginsに

id ‘kotlin-android-extensions’

を追加すれば使えるようになります。

as413k 02 - [Android & Kotlin] View Binding はfindViewByIdの後継
 
 
 

References:
Migrate from Kotlin synthetics to Jetpack view binding
Kotlin Android Extensions の未来
ビュー バインディング – Android Developers
findViewById




 

アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう。


TECH ACADEMY
Androidアプリコース



Code Camp
現役エンジニアによるオンラインプログラミングスクール【CodeCamp】


直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。


侍エンジニア塾
侍エンジニア塾 無料体験レッスン


シェアする

  • このエントリーをはてなブックマークに追加

フォローする