B-Teck!

お仕事からゲームまで幅広く

【Android】syntheticsのサポートが終了するのでViewBindingを使ってみた

なぜViewBindingの導入をしたか

Kotlin Android ExtentionのSyntheticsなどが非推奨になったため。

Kotlin Android Extensions の未来

Syntheticsがなぜ非推奨になったのか

  • どこからでも参照できてしまうのでネームスペースがごちゃごちゃになる
  • Nullの可能性の情報を公開しないので、常にNullableとして扱う必要がある
  • Kotlinでしか動作しない

ViewBindingの利点

  • DataBindingとbindingの扱い方がほぼ同じ
  • Bindingクラスが自動生成されるのでコードが必ずレイアウトに対応する
  • Null安全
  • Javaでも動く

導入

buildFeaturesに設定値を追加すると、Viewに対応するBindingクラスが自動生成される。

buildFeatures {
    viewBinding true
}

自動生成されたクラスをViewのOnCreateで読み出し利用する。

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.androidfundamentals.databinding.ActivityMainBinding

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

        binding.textView1.text = "test"
    }
}

参考にしたサイト

matsudamper.hatenablog.com qiita.com