なぜViewBindingの導入をしたか
Kotlin Android ExtentionのSyntheticsなどが非推奨になったため。
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" } }