Ink

Contents related to tech, hobby, etc

ViewBindingでの設定がきちんと反映されていなかった理由がわかった

|

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
   }
 }