如果我以编程方式 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) 它会如您所愿地工作。