Android: Data Binding avoid NPE?

2045 ワード

DataBindingとは?
https://developer.android.com/topic/libraries/data-binding
レイアウトのUIコンポーネントをアプリケーションのデータ・ソースに結合できるサポート・ライブラリ.
findViewById
    findViewById<TextView>(R.id.sample_text).apply {
        text = viewModel.userName
    }
data binding
<TextView
        android:text="@{viewmodel.userName}" />
    
NPE?
データバインドを簡単に表示すると、上記の利便性がわかりますが、モデルがnullの場合は?バインドする必要があるデータがnullの場合、xmlはnpeを生成しませんか?
スタックオーバーフローではほぼ避けるそうです.
Well data binding avoids NullPointerException in general by checking for it and assigns the default value (null for example) even if item itself is null in your example.
Data binding does not need to check for null value, it will be handled by binding class.
生成されたデータバインドコードは、空のポインタ異常を回避するために自動的に空にチェックされます.
たとえば
userがnullの場合
user.nameはデフォルト(null)
user.ageはデフォルト値(0)(ageはint)
そこでbinding classを確認しましたが、super内側はprivateなので見えませんが、確かにそうです.
公式にも言いたいことがなければ、本当に不安なら演算子で処理できます.android:text='@{item.title != null ? user.title : ""}'orandroid:text='@{item.title ?? ""}'