Передать функцию обратного вызова в пользовательский вид в Android - PullRequest
0 голосов
/ 03 августа 2020

У меня есть настраиваемое представление в моем проекте android, MyCustomView.

Со встроенным представлением, как кнопка, я могу использовать библиотеку привязки данных для передачи функции обратного вызова кнопке:


<Button
    ...
    android:onClick="@{() -> viewModel.donePressed()}" />

Как передать функцию обратного вызова, к которой я могу получить доступ в классе MyCustomView через XML?

Я хочу, чтобы она выглядела примерно так:


<MyCustomView app:onFinish="@{() -> viewModel.finish()}" />

Затем в классе MyCustomView (расширяющем LinearLayout) мне нужно вызвать переменную onFinish.

Спасибо за любые идеи.

1 Ответ

0 голосов
/ 04 августа 2020

Я нашел ответ: на самом деле это делается автоматически Android.

Если я добавлю сеттер publi c к моему MyCustomView классу, например:

public fun setOnFinish(callback: () -> Unit) {
    ...
}

Затем Android автоматически сгенерирует атрибут app:onFinish (без части имени set):

<MyCustomView app:onFinish="@{() -> viewModel.finish()}" />

Затем функция, которую я определил, вызывается после конструктор пользовательского представления.

Если вам нужна дополнительная настройка, вы также можете использовать адаптер привязки: https://developer.android.com/topic/libraries/data-binding/binding-adapters

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...