I have a tab layout. I want to call "onTabChanged" function in a view model when user clicked on a tab. So far I have tried this:
@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?) {}
})
}
In layout.xml:
<data>
<variable
name="viewModel"
type="com.janfranco.ui.menu.MenuViewModel" />
</data>
...
app:onTabChanged="@{viewModel::onTabChanged}"
In view model:
fun onTabChanged(tab: TabLayout.Tab) { }
In layout, I got the following error: Listener class 'kotlin.jvm.functions.Function1<? super com.google.android.material.tabs.TabLayout.Tab,kotlin.Unit>' with method 'invoke' did not match signature of any method 'app:onTabChanged'
How can I solve this?
In your viewModel instead of this :
fun onTabChanged(tab: TabLayout.Tab) { }
you should have this :
val onTabChanged = { tab: TabLayout.Tab -> }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With