【问题标题】:How to pass a function with arguments in Android custom data binding如何在 Android 自定义数据绑定中传递带参数的函数
【发布时间】:2021-05-29 07:07:49
【问题描述】:

我有一个标签布局。当用户单击选项卡时,我想在视图模型中调用“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}"

在视图模型中:

fun onTabChanged(tab: TabLayout.Tab) { }

在布局中,出现以下错误:Listener class 'kotlin.jvm.functions.Function1 super com.google.android.material.tabs.TabLayout.Tab,kotlin.Unit>' 与方法 'invoke' 与任何方法 'app:onTabChanged' 的签名都不匹配

我该如何解决这个问题?

【问题讨论】:

    标签: android kotlin data-binding android-databinding


    【解决方案1】:

    在你的viewModel 中而不是这个:

    fun onTabChanged(tab: TabLayout.Tab) { }
    

    你应该有这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      相关资源
      最近更新 更多