FragmentのrequireContext()
Fragment
のgetContext()
はnullableだが、requireContext()
メソッドでnullableではない値が取得できる。
requireContext().getString(R.string.foo)
ただしgetContext()
で取得できるコンテキストの値がnull
になっていると
java.lang.IllegalStateException
がスローされる。
コールバックでrequireContext()を呼び出すとクラッシュすることがある
例えばボタンのsetOnClickListenr
に渡すコールバック関数で
requireContext()
を実行すると状況によってクラッシュする可能性がある。
画面遷移中にコールバックが呼ばれるときなどはコンテキストの値がnull
となっているので、
java.lang.IllegalStateException
がスローされる。
somebutton.setOnClickListenr {
// contextがnullの場合はjava.lang.IllegalStateExceptionがスローされる
binding?.textView.text = requireContext().getString(R.string.foo)
}
対応方法
getContext()
で取得される値がnull
ではないことをチェックしておけばオーケー。
somebutton.setOnClickListenr {
if (context == null) {
return@setOnClickListenr
}
binding?.textView.text = requireContext().getString(R.string.foo)
}
エルビス演算子を使ったnullチェックを使ってシンプルに書ける。
somebutton.setOnClickListenr {
val c = context ?: return@setOnClickListenr
binding?.textView.text = c.getString(R.string.foo)
}
\確かな知識を身に着けたい、Androidアプリ開発を学びたい人にオススメ!/