【ケース別】XMLのonClickでViewModel上の関数を呼び出す[Android]

○ 目次 

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


ぴこはんの開発日記

自分で開発したものを紹介するところ 最近はKotlinでAndroidアプリをさわってます 言語 Kotlin/Java

0コメント

  • 1000 / 1000