我有简单的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。
我完全没有这种行为。
几个小时后,我通过将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()
}
}
}