如果我以编程方式 select Tab,则不会调用 TabLayout onTabSelected,但 UI 正在更改
TabLayout onTabSelected is not called if I select Tab programatically, but UI is changing
我想用 2 Tabs
实现简单的 TabLayout
。但我注意到,如果我以编程方式 select 选项卡,它不会触发 onTabSelected,
只有当我在 UI.
中点击它时
有什么触发方法的建议吗?
tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
lastSelected = tab.position
startFragment()
}
override fun onTabUnselected(tab: TabLayout.Tab) {}
override fun onTabReselected(tab: TabLayout.Tab) {}
})
tabs.getTabAt(0)?.select()
嗯。
您可以 View.performClick()
让它发挥作用。
当你调用tabs.getTabAt(0)?.select()
时如果你的选项卡已经select 0 则意味着onTabSelected
没有被调用,它将被调用onTabReselected
。当您调用 tabs.addTab()
或使用 XML 设置 TabItem
时的常见错误,它已经 select 您初始化的第一个选项卡。要修复它,您应该 addTab(tab, false)
它会如您所愿地工作。
我想用 2 Tabs
实现简单的 TabLayout
。但我注意到,如果我以编程方式 select 选项卡,它不会触发 onTabSelected,
只有当我在 UI.
有什么触发方法的建议吗?
tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
lastSelected = tab.position
startFragment()
}
override fun onTabUnselected(tab: TabLayout.Tab) {}
override fun onTabReselected(tab: TabLayout.Tab) {}
})
tabs.getTabAt(0)?.select()
嗯。
您可以 View.performClick()
让它发挥作用。
当你调用tabs.getTabAt(0)?.select()
时如果你的选项卡已经select 0 则意味着onTabSelected
没有被调用,它将被调用onTabReselected
。当您调用 tabs.addTab()
或使用 XML 设置 TabItem
时的常见错误,它已经 select 您初始化的第一个选项卡。要修复它,您应该 addTab(tab, false)
它会如您所愿地工作。