【问题标题】:TabLayout onTabSelected is not called if I select Tab programatically, but UI is changing如果我以编程方式选择 Tab,则不会调用 TabLayout onTabSelected,但 UI 正在更改
【发布时间】:2020-05-20 15:44:51
【问题描述】:

我想用 2 个Tabs 实现简单的TabLayout。但我注意到,如果我以编程方式选择选项卡,只有在 UI 中点击它时才会触发 onTabSelected,

有什么建议可以触发吗?

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()

【问题讨论】:

    标签: android kotlin android-tablayout


    【解决方案1】:

    当您调用tabs.getTabAt(0)?.select() 时,如果您的选项卡已选择 0,则表示未调用onTabSelected,它将调用onTabReselected。调用tabs.addTab() 或使用XML 设置TabItem 时的常见错误,它已经选择了您初始化的第一个选项卡。要修复它,你应该 addTab(tab, false) 它会像你想要的那样工作。

    【讨论】:

    • 向 onTabReselected 添加相同的功能。
    【解决方案2】:

    嗯。 您可以通过我们View.performClick() 使其正常工作。

    【讨论】:

    • 我不能。选项卡不是视图。它没有扩展 View 类所以我没有这个功能可用
    • 还尝试了tabs.getChildAt(0)?.performClick(),它返回了一些视图,但它根本没有连接到监听器。
    • 对不起,我认为它是 TableLayout,而不是 TabLayout。我把 TableLayout 去掉了,或者用 RadioGroup+RadioButton 或 CheckBox 做同样的功能,可能很简单,功能也一样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2021-12-24
    • 2015-12-21
    相关资源
    最近更新 更多