トップ画像
2. 一からアンドロイド開発をして思った、知っておくべきこと~ViewBinding編~

執筆者: オキリョウ

最終更新: 2021/03/08

こんにちは、オキリョウと申します!
このシリーズでは私が初めてAndroidアプリ(下のURLのやつ)を作成した時に「最初から知っておきたかったな・・・」と感じたことを書いていきたいと思います。
 
是非見ていってください↓↓↓
https://play.google.com/store/apps/details?id=com.wsr.shopping_friend

今回紹介するのは「ViewBinding」です。
 

どういう内容?

Androidのコードを書いていると、Viewを操作したり、Event発生時の処理を書いたりしたくなる時が多々あります。
例えば、画面上にあるボタンを押したらメッセージが出てくる、といった実装をするときです。そのような時、どういう風に書くのかというのが今回の議題です。
 

1.findViewById

まず、古い記事などでよくみられるのがfindViewByIdです。

val button = findViewById<Button>(R.id.button)

button.setOnClickListener {
    //処理を書く
}

このように書くことで自分の指定したid(この場合だとbutton)のボタンが押されたときの処理を書くことが出来るようになります。
ただ、このfindViewByIdはいくつか問題を抱えていました。コードが複雑になったり、返り値がnullableだったり…
幸いにも私はfindViewByIdを利用するのはあまりよろしくないという記事を発見したので無事回避することが出来ました。
 

2.Kotlin Android Extensions

次に考えられるのがKotlin Android Extensionsを使った方法です。
こちらはGradleファイルに記述を加える事で使えるようになるものです。これを使うことで、先ほどのコードは以下のように書くことが出来ます。

button.setOnClickListener {
    //処理を書く
 }

findViewByIdというのが無くなってますね。
これは、プログラム側が勝手にfindViewByIdをしてくれ、id名と同じ名前の変数に代入してくれているからです。

これによりfindViewByIdよりも簡潔に書けるようになりました。ついでにfindViewByIdが持っていた「型安全ではない」という問題も解決してくれています。
これだけ聞くとかなり優秀そうです。実際にKotlin Android Extensionsを使っていたり、称賛している記事も多くありました。
そこで私のアプリにも導入して、コーディングしていました。
 
しかし、この2020年11月24日にサポートが終了してしまいました。
というのも、Kotlin Android Extensions自体もまた問題をいくつか抱えていたからです。

まずKotlinでしか動かないことです。そりゃあ、KotlinのExtensionsなんだから当たり前の話です。しかし、古くからあったアプリとかがJavaで組まれていることを考えると無視できない問題であることが分かります。

次にnullableであることです。つまり、findViewByIdが抱えていた問題が解決できていないということです。

そして、コードが汚くなるということです。
Kotlin Android ExtensionsではXMLで定義されたidと全く同じ名前の変数にいろいろ準備してくれます。
しかし、そもそもXMLはスネークケース(kotlin_is_best)、Kotlinではキャメルケース(kotlinIsBest)と命名規則が違います。したがってKotlinのコードに本来あるべきではないスネークケースが紛れ込むことになります。
これらの理由からサポートが終了してしまったとのことです。
 

3.ViewBinding

そしてこれらの問題をほぼ全部解決するのがViewBindingとなります。
このViewBindingがどういうものなのかを書くと長くなってしまうので省略しますが、導入することにデメリットはないという人もいるくらいのものです。必ず導入してあげましょう。
参考URL: https://developer.android.com/topic/libraries/view-binding?hl=ja
 
ちなみに私のアプリは現在懸命にKotlin Android Extensionsから移行している最中です…皆さんも気を付けましょう。

取得に失敗しました

2020年度 入部

Twitter GitHub