0
Help us understand the problem. What are the problem?

posted at

findViewById vs viewBinding

findViewById vs viewBinding

Kotlin での Android アプリ開発勉強中のみやジックです。
現在は Google の提供している Android Basics in Kotlin を進めています。
Unit 2:Layouts の Pathway1で viewBinding が出てきて、「ん?」ってなったので頭の中を整理するためにこの記事を書きます。

viewBinding とはなんぞ

コードが View に対するメソッドを呼び出したり、その属性にアクセスしたりする前に、コードで Button や TextView などの View への参照を調べる必要があります。Android フレームワークには、findViewById() というメソッドが用意されており、View の ID を指定してその参照を返すという、まさにここで必要な操作を行えます。このアプローチは効果的ですが、アプリにビューを追加すると UI が複雑になるため、findViewById() の使用が難しくなる可能性があります。

まあ、View をコードから参照するときに便利にやってくれるやつ。

これまでは findViewById()を使って参照してたけど、それより楽になるやで~って書いてある。

ちなみに Bind って聞くとなんか縛り付けるイメージあるけど、関連づけや参照のような意味っぽい

findById より本当に楽なん?

実際にやってみた。
まずは findById での参照をUnit 1:KotlinBasics の Pathway4を参考にやってみる。

まず、viewsと呼ばれる部品をactivity_main.xmlに配置します。今回はTextViewとButtonの二つを配置しました。

MainActivity.ktからfindByIdでTextViewとButtonの参照をして、Buttonの押下でtextを変更できるようにする。

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val rollButton: Button = findViewById(R.id.button)
        val textView: TextView = findViewById(R.id.textView)
        rollButton.setOnClickListener {
            textView.text = "changed"
        }
    }
}

こんな感じになる。それぞれのviewsごとにfindViewByIdを呼ぶことになる。

次にviewBindingで書き直してみる。

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.button.setOnClickListener {
            binding.textView.text = "changed"
        }
    }
}

※ viewBindingを使うときはbuild.gradleで設定する必要があるので注意

build.gradle内のandroidブロック内に下記を追記して、SyncNowをクリック

    buildFeatures {
        viewBinding = true
    }

これでviewBindingを用いて同じ挙動の実装ができた。
MainActivityクラス内では、viewの数だけfindByIdを呼ぶ必要が無くなった。viewが増えれば増えるほどviewBindingの利点は大きくなりそう。

今回書いたコードのリポジトリ

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?