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アプリ開発を学びたい人にオススメ!/
