启用 TabLayout 未启用 onTouchEvents - 选项卡不可点击

Enabling TabLayout is not enabling onTouchEvents - Tabs not clickable

我有简单的 TabLayout 和 2 Tabs。一会儿我需要禁用 TabLayout 并禁用用户与 Tabs 的交互。

但是如果我想再次启用它们,它是行不通的。选项卡指示器和 alpha 变回正常,但选项卡对用户交互没有反应。

select() 功能与听众的反应正常,只有与屏幕上的选项卡的物理交互不起作用。

有人遇到过这个问题吗?

enable/disable Tabs 的功能(某些部分只是禁用状态的视觉变化 - 如果您像 Button 那样禁用它,TabLayout 不会变灰)

private fun deactivateTabs(){
        tabs.apply {
            selectTab(null)
            isEnabled = false
            touchables?.forEach {
                it.isEnabled = false
                it.alpha = .5f
            }
            setSelectedTabIndicatorColor(ContextCompat.getColor(tabs.context, R.color.grey))
        }
    }

    private var lastSelected: Int = -1
    private fun activateTabs(){
        tabs.apply {
            isEnabled = true
            touchables?.forEach {
                it.isEnabled = true
                it.alpha = 1f
            }
            setSelectedTabIndicatorColor(ContextCompat.getColor(tabs.context, R.color.colorTab))

            if (lastSelected == -1){
                //default tab
                getTabAt(0)?.select()
            } else {
                getTabAt(lastSelected)?.select()
            }
        }
    }

此外 childCount 与我的 TabLayout 中的 tabCount 不同,这在 Android 中是完全奇怪的行为。我在 TabLayout 内的布局 xml 中添加了选项卡,因此它应该算作它的子项。但是 childCount 是 1 而 tabCount 是 2.

我完全没有这种行为。

几个小时后,我通过将 Tabs 保存为可触摸的 Views 解决了这个问题。

我无法直接改变状态。我不得不保存 touchables,它创建了克隆(带指针)。我更改了那些而不是真实的。

更新代码:

private fun deactivateTabs(){
        tabs.apply {
            tabsAsTouchables = touchables
            tabsAsTouchables.forEach {
                it.isEnabled = false
                it.alpha = .5f
            }
            setSelectedTabIndicatorColor(ContextCompat.getColor(tabs.context, R.color.grey))
        }
    }

    private var lastSelected: Int = -1
    private var tabsAsTouchables: List<View> = emptyList()
    private fun activateTabs(){
        tabs.apply {
            tabsAsTouchables.forEach {
                it.isEnabled = true
                it.alpha = 1f
            }
            setSelectedTabIndicatorColor(ContextCompat.getColor(tabs.context, R.color.colorTab))

            if (lastSelected == -1){
                //default tab
                getTabAt(TAB_HISTORY)?.select()
            } else {
                getTabAt(lastSelected)?.select()
            }
        }
    }