バインディング式でクリックイベントを取得する

1 min read読了の目安(約1100字

DataBindingのバインディング式で、クリックイベントを取得する方法です。

android:onClick属性を設定する

クリックイベントを取得したいウィジェットに、android:onClickを指定します。

// 引数のViewなし
android:onClick="@{() -> viewModel.clickText()}"
// 引数のViewあり
android:onClick="@{viewModel::clickButton}"
// バインドされているデータを渡す
android:onClick="@{() -> viewModel.clickText(model)}"
// ViewModel.kt

// android:onClick="@{() -> viewModel.clickText()}"の処理
fun clickText() {}

// android:onClick="@{viewModel::clickButton}"の処理
fun clickButton(view: View) {}

// android:onClick="@{() -> viewModel.clickText(model)}"の処理
fun clickText(model: Model) {}

その他のイベント

// EditTextの入力を監視する
android:onTextChanged="@{viewModel::onTextChange}"

// SwipeRefreshLayoutのリフレッシュイベントを取得する
app:onRefreshListener="@{() -> viewModel.refresh()}"
// ViewModel.kt

// android:onTextChanged="@{viewModel::onTextChange}"の処理
fun onTextChange(s: CharSequence, start: Int, end: Int, count: Int) {}

// app:onRefreshListener="@{() -> viewModel.refresh()}"の処理
fun refresh() {}

まとめ

詳細は「developersの レイアウトとバインディング式 」に書いてあるので、見てみて下さい!