lifecycleOwnerのセットを忘れるとデータバインディングが連動しない

LiveDataを持ったViewModelを使ってデータバインディングを使う場合、Fragmentで 以下のようにViewModelとレイアウトを紐づける。

参考: 【Android,Kotlin】双方向・単方向データバインディングの実装手順

class FooFragment : Fragment() {
    private var binding: FragmentFooBinding? = null
    private val viewModel: FooViewModel by viewModels()

    override fun onCreateView(...): View? {
        binding = FragmentFooBinding.inflate(inflater, container, false)
        binding?.lifecycleOwner = this // この行が必要!!
        binding?.viewModel = viewModel // ビューモデルを設定
        
        return binding?.root
    }
}

以上のうちの以下の部分について、

// (1) bindingの生成
binding = FragmentFooBinding.inflate(inflater, container, false)
// (2) Fragmentのライフサイクルに連動させる
binding?.lifecycleOwner = this
// (3) ビューモデルを設定
binding?.viewModel = FooViewModel()

(1)と(3)は「レイアウトとViewModelを紐づけよう」という気持ちで書いているので忘れることはないが、 (2)は抜けがち。

「エラーは出ないけどViewModelに設定した値が画面に反映されない」という状況に遭遇したら、 lifecycleOwnerで該当画面と連動させるのを忘れていないかを確認する。