android - 如何在 Android 自定义数据绑定(bind)中传递带参数的函数

标签 android kotlin data-binding android-databinding

我有一个标签布局。当用户单击选项卡时,我想在 View 模型中调用“onTabChanged”函数。到目前为止,我已经试过了:

@BindingAdapter("onTabChanged")
fun setOnTabChanged(tabLayout: TabLayout, onTabChanged: (TabLayout.Tab) -> Unit) {
    tabLayout.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener {
        override fun onTabSelected(tab: TabLayout.Tab?) {
            tab?.let {
                onTabChanged(it)
            }
        }
        override fun onTabUnselected(tab: TabLayout.Tab?) {}
        override fun onTabReselected(tab: TabLayout.Tab?) {}
    })
}

在 layout.xml 中:

<data>
    <variable
        name="viewModel"
        type="com.janfranco.ui.menu.MenuViewModel" />
</data>

...

app:onTabChanged="@{viewModel::onTabChanged}"

在 View 模型中:

fun onTabChanged(tab: TabLayout.Tab) { }

在布局中,我收到以下错误:Listener class 'kotlin.jvm.functions.Function1'方法'invoke'不匹配任何方法'app:onTabChanged'的签名

我该如何解决这个问题?

最佳答案

在你的 viewModel 而不是这个:

fun onTabChanged(tab: TabLayout.Tab) { }

你应该有这个:

 val onTabChanged = { tab: TabLayout.Tab -> }

关于android - 如何在 Android 自定义数据绑定(bind)中传递带参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66393659/

相关文章:

android - 使用 FirebaseMessagingService 类时出现错误 "return type int is not compatible with Intent"

android - 使用数据绑定(bind)的问题 : val vs var and the use invalidateAll()

kotlin - AWS Lambda的意外行为

javascript - 标记主体中的 ASP.NET webForm 变量绑定(bind)

android - 每隔一段时间在后台执行网络服务

android - 是否可以在 LayerDrawable 中使用几个 9 补丁图像?

android - 帮助选择微调器的时间

function - 如何将空值分配给 Kotlin 中的函数类型变量?

javascript - Knockout 可观察对象未观察到其中一项属性

c# - 将列表框绑定(bind)到 WPF 中字符串类型的 Observable 集合