2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今更すぎるAndroidのXMLレイアウトの実装、Viewの参照/紐付けの仕方の変遷

Posted at

はじめに

Androidエンジニアとして働き始めてはや4週間。
目の前の仕事とインプットをする日々であっという間に過ぎています。

そんな中今回はレイアウト関連で、当たり前だけど、今更なんだっけと聞けない人や僕のようなペーペーAndroiderが調べるであろうところを自分のアウトプットのためにも残しておこうと思います。
そもそも、自分の今入っているプロジェクトがかなり昔から続いているアプリでいろんな時代の技術が残っていたりするので、とりあえずJetpackCompposeだけを理解すれば良いみたいな感じではなく、このような記事を書くに至っています。

iOSエンジニア時代は、storyboardとなんか似てるけど色々書いたり、レイアウトがいまいち見た目でピンとこないなーとかって思っていました。(storyboardはピーってViewクラスの宣言先にGUIでくっつければよかったし、UIのパーツも割と配置や間隔や見た目なども個人的には分かりやすかった)

UI実装の変遷

まずは、UI実装はXMLレイアウトとJetpackComposeといった実装がある中でXMLレイアウトを利用した際のViewのコード、いわゆるActivityやFragmentとのbindingについて書いていきます。

調べた感じ登場の順序として、
最初期はfindViewById

findViewById<HButton>(R.id.button)

次はアノテーション@BindView

@BindView(R.id.button)
lateinit var button: Button

その次はDataBinding

// 双方向バインディング
android:text="@={viewModel.text}"

その次はViewBinding

// 単一方向のビュー参照
binding.button.text = "Click me"

そしてJetpack Compose

@Composable
fun Xxx(){
   
}

といった流れになっています。

findViewByIdはNullチェックが必要であったり型を明示的にしないといけなかったりと不安定なものですが、
その次はViewBindingによってNull安全、型安全なものになりました。(見た目もシンプル)

DataBindingとViewBindingと名前が似ていますが、どのような違いがあるか調べました。

上記の例でも少し触れていますが、単一な参照なのか双方向に参照し合うのかの違いが大きいです。
MVVMのデザインパターンを利用している場合やデータの状態をリアルタイムに画面の変更を反映したい場合はDataBindingが向いています。
単純に画面へデータの反映を行い、ユーザーのインタラクトに対して特定の処理を実行するものであればViewBindingが向いています。

※向いていますという表現があっているか疑問ではありますが、どちらもそのようなシーンに向いているというだけであってそれぞれでも実現できはします。

inflateって何?

最初思いました、「inflateって何?」
これはXMLファイルをViewのコードから操作できるようにするお決まりの処理です。

// activity_main.xmlというXMLファイルを
// ActivityMainBindingというViewオブジェクトに変換
binding = ActivityMainBinding.inflate(layoutInflater)

// layoutInflaterはXMLレイアウトファイルを解析してViewオブジェクトを生成するサービスのようです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?