在 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
我的 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