ViewBindingでの設定がきちんと反映されていなかった理由がわかった
分かる人が見ればすぐ分かる凡ミスなのだけど、結構時間掛かってしまったので 置いておきます。
問題
以下のようなコードを書いていました。
ViewBindingを用いて、 myButton
が押された時に実行される OnClickListener
を
設定しているものです。
class MyFragment: Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view: View? = inflater.inflate(R.layout.fragment_mine, container, false)
val binding = MyBinding.inflate(inflator)
binding.myButton.setOnClickListener { view ->
// Do some action
}
return view
}
}
でも、実行して myButon
を押してみても一向に反応しない。
他のレイアウトだとか何だとかをいじってみたりしたけど変わらず...
原因
初めから フラグメントでビューバインディングを使用するを読んでおけばよかったはなしではある。
凄く単純な話で、
戻り値として binding.root
を返す必要があります!!!!!!
今だと inflater.inflate
で作成したViewを返していて、それには OnClickListener
が設定
されていないんですね。
なので呼び出されるはずもないという。なるほど~~
!!!!
と、いうことで結果的にはこうすれば良いのでした:
class MyFragment: Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- val view: View? = inflater.inflate(R.layout.fragment_mine, container, false)
val binding = MyBinding.inflate(inflator)
binding.myButton.setOnClickListener { view ->
// Do some action
}
- return view
+ return binding.root
}
}