首页 > 解决方案 > 如何让xml中的`onClick()`调用两种方法?

问题描述

我想onClick()在我的布局 xml 中触发来自两个视图模型的两种方法。

代码:

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

上面的代码调用了一种方法,我希望它从不同的视图模型中调用另一种方法。
我要添加的函数调用:model2.onButtonClick()

可能吗?如果是,请添加一个最小示例。(期待一个xml解决方案

注意:视图模型在 xml 中作为参数传递。(数据绑定变量)

编辑 1:这两个功能都在两个不同的视图模型中。所以我(经过一些研究)知道在另一个视图模型中使用/声明/初始化一个视图模型不是一个好习惯。

我可以在我的片段中创建一个点击监听器并在那里调用这两个函数。但我想消除片段中的点击监听器(根据 MVVM 的视图)。

我不是在寻找一些可能的方法。我正在寻找一种最佳实践方法,我打算在其中实现 MVVM、关注点分离和数据绑定。

标签: androidonclickandroid-databindingbuttonclick

解决方案


我找到了解决方案。也许愚蠢但简单的天才:

app:onRefreshListener="@{() -> dashboardVM.onRefresh() != homeVM.onRefresh()}"

方法需要返回 true/false -> 无论如何。

对于任何其他数量的方法,使用OR并始终返回 false。

正确的解决方案应通过转换器实现。但这需要很多代码。


推荐阅读