在 Android 中将回调函数传递给自定义视图

Pass Callback Function to Custom View in Android

我的 android 项目中有一个自定义视图,MyCustomView

有了像按钮这样的内置视图,我可以使用数据绑定库将回调函数传递给按钮:


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

如何通过 XML 传递一个我可以在 MyCustomView class 中访问的回调函数?

我希望它看起来像这样:


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

然后在MyCustomView class(扩展LinearLayout)我需要调用onFinish变量。

感谢您的任何想法。

我找到了答案:这实际上是由 Android 自动完成的。

如果我像这样将 public setter 添加到我的 MyCustomView class 中:

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

然后Android会自动生成app:onFinish属性(不带名字的set部分):

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

然后,我定义的函数在自定义视图的构造函数之后调用。

如果您需要进一步定制,您还可以使用绑定适配器:https://developer.android.com/topic/libraries/data-binding/binding-adapters