如果初始选项卡选择为索引 0,为什么不触发 myTabSelectedListener?
why myTabSelectedListener not triggered if the initial tab selection is index 0?
所以我希望我的选项卡根据特定条件以编程方式切换,所以我的 onResume 上有这段代码
override fun onResume() {
super.onResume()
// programatically set tab position based on certain condition
if (someConditionHere == 0) {
tabLayout.getTabAt(0)?.select()
} else if (someConditionHere == 1) {
tabLayout.getTabAt(1)?.select()
}
}
然后当用户 select 我的选项卡布局上的选项卡像这样
时,我有监听器来处理
tabLayout.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab?) {
if (tab?.position == 0) {
performActionA()
} else if (tab?.position == 1) {
performActionB()
}
}
override fun onTabReselected(tab: TabLayout.Tab?) {
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
}
})
}
当第一次触发onResume时someConditionHere == 1
,然后会调用onTabSelected
触发performActionB()
但不幸的是,当someConditionHere == 0
开始时,onTabSelected
不会被调用,所以performActionA()
不会在第一时间被触发。我怀疑选项卡布局默认位于索引 0 上,因此当条件也在索引选项卡 0 中时,将不会触发 addOnTabListener
如何解决这个问题?我希望我的 performActionA()
在 someConditionHere == 0
时从一开始就被调用。如果在 onResume()
中硬编码 performActionA()
不幸的是它将被调用两次
java/kotlin还可以
在TabLayout.OnTabSelectedListener
里面有一个方法叫做onTabReselected
,正如我评论中提到的,它的作用是针对一个已经被选中并且被再次选中的选项卡。
因此,您可能希望将其内容替换为 onTabSelected
的内容。
所以,如果您创建一个函数会更好,这样您就不必重复代码。
fun performNecessaryAction(tab: TabLayout.Tab?) {
if (tab?.position == 0) {
performActionA()
} else if (tab?.position == 1) {
performActionB()
}
}
监听器将如下所示...
tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabReselected(tab: TabLayout.Tab?) {
performNecessaryAction(tab)
}
override fun onTabSelected(tab: TabLayout.Tab?) {
performNecessaryAction(tab)
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
}
})
所以我希望我的选项卡根据特定条件以编程方式切换,所以我的 onResume 上有这段代码
override fun onResume() {
super.onResume()
// programatically set tab position based on certain condition
if (someConditionHere == 0) {
tabLayout.getTabAt(0)?.select()
} else if (someConditionHere == 1) {
tabLayout.getTabAt(1)?.select()
}
}
然后当用户 select 我的选项卡布局上的选项卡像这样
时,我有监听器来处理tabLayout.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab?) {
if (tab?.position == 0) {
performActionA()
} else if (tab?.position == 1) {
performActionB()
}
}
override fun onTabReselected(tab: TabLayout.Tab?) {
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
}
})
}
当第一次触发onResume时someConditionHere == 1
,然后会调用onTabSelected
触发performActionB()
但不幸的是,当someConditionHere == 0
开始时,onTabSelected
不会被调用,所以performActionA()
不会在第一时间被触发。我怀疑选项卡布局默认位于索引 0 上,因此当条件也在索引选项卡 0 中时,将不会触发 addOnTabListener
如何解决这个问题?我希望我的 performActionA()
在 someConditionHere == 0
时从一开始就被调用。如果在 onResume()
中硬编码 performActionA()
不幸的是它将被调用两次
java/kotlin还可以
在TabLayout.OnTabSelectedListener
里面有一个方法叫做onTabReselected
,正如我评论中提到的,它的作用是针对一个已经被选中并且被再次选中的选项卡。
因此,您可能希望将其内容替换为 onTabSelected
的内容。
所以,如果您创建一个函数会更好,这样您就不必重复代码。
fun performNecessaryAction(tab: TabLayout.Tab?) {
if (tab?.position == 0) {
performActionA()
} else if (tab?.position == 1) {
performActionB()
}
}
监听器将如下所示...
tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabReselected(tab: TabLayout.Tab?) {
performNecessaryAction(tab)
}
override fun onTabSelected(tab: TabLayout.Tab?) {
performNecessaryAction(tab)
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
}
})