○ 目次
・1. 引数なし関数の呼び出し方
・2. 引数あり(View型以外)関数の呼び出し方
・3. 引数あり(View型のみ)関数の呼び出し方
・4. まとめ
1. 引数なし関数の呼び出し方
ViewModel
XML
ViewModel側では普通のpublicな関数を用意するだけです。
xml側では `android:onClick`に`"@{() -> viewModel.関数名()}"` といった形で設定します。
2. 引数あり(View型以外)関数の呼び出し方
ViewModel
XML
ViewModelでは任意の型の引数を取る関数を用意します。(引数は複数でも可)
xmlでは引数あり関数の呼び出し方と同様にして `android:onClick` に記述します。先ほどと違う点については、関数内に引数を取るところです。
上の例では直接 `('key')` と値を設定していますが、実際は `<data>`の`<variable>` にデータクラスなどを設定しておいて、それを呼び出す形になると思います。
3. 引数あり(View型のみ)関数の呼び出し方
ViewModel
XML
viewModel側で2の説明と変わったところは関数の引数が `view:View` となったところです。今回の例はこのケースのみ使用することができます。このようにすることで、 `onClick` を呼び出したViewを取得することができます。
xml側の変更点は、 `android:onClick` 内の記述が `@{viewModel.onRadioButtonClicked}` となったところです。viewそのものを引数に取るので明示的に書かなくていいみたいです。
今回の方法は、クリックイベントの後にそのViewのプロパティを変更するときや、`RadioButton` など複数のViewから選択されたViewを取得する際に便利そうです。
4.まとめ
ViewModelでは任意の引数を持つ関数を書いて、引数に応じてXMLの`android:onClick`の記述方法を変えることで実現できます。
- 1. 引数なし -> @{()-> viewModel.onclick()}
- 2. 引数あり(view型以外) -> @{()-> viewModel.onClick('key')}
- 3. 引数あり(View型) -> @{viewModel.onClick}
0コメント