🧗‍♀️

【Android】DataBinding のバインディング式でクリックイベントを取得する

2021/03/18に公開

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() {}

参考

レイアウトとバインディング式

Discussion