启用TabLayout无法启用onTouchEvents-选项卡不可单击

问题描述 投票:0回答:1

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

但是如果我想再次启用它们,它将无法正常工作。选项卡指示器和Alpha更改回正常,但选项卡对用户交互没有反应。

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

有人遇到这个问题吗?

启用/禁用Tabs的功能(某些部件只是视觉上的更改以禁用状态-如果像TabLayout那样禁用它,Button不会变灰]

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与我的tabCount中的TabLayout不同,这在Android中是完全怪异的行为。我在TabLayout中的布局xml中添加了制表符,因此应将其视为其子级。但是childCount为1,tabCount为2。

我完全没有这种行为。

android android-layout android-tablayout
1个回答
0
投票

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

我无法直接更改状态。我必须保存可触摸对象,该对象创建了克隆(带有指针)。我更改了这些内容,而不是真实的内容。

更新的代码:

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()
            }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.