Android 如果初始选项卡选择为索引0,为什么不触发myTabSelectedListener?
所以我希望我的标签可以根据特定的条件进行编程切换,所以我的简历上有这段代码Android 如果初始选项卡选择为索引0,为什么不触发myTabSelectedListener?,android,android-tablayout,Android,Android Tablayout,所以我希望我的标签可以根据特定的条件进行编程切换,所以我的简历上有这段代码 override fun onResume() { super.onResume() // programatically set tab position based on certain condition if (someConditionHere == 0) { tabLayout.getTabAt(0)?.select() }
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()
}
}
然后,当用户在我的选项卡布局上选择这样的选项卡时,我需要处理侦听器
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
时,将调用OnAbsSelected
来触发performActionB()
但不幸的是,当开始时someConditionHere==0
时,将不会调用onTabSelected
,因此不会在第一次触发performationa()。我怀疑选项卡布局默认值在索引0上,因此当条件也在索引选项卡0中时,addOnTabListener
将不会触发
如何解决这个问题?我希望在someConditionHere==0时从一开始就调用我的performationa()
。如果在onResume()
中使用硬代码performActionA()
,则会调用两次
java/kotlin在表格布局中没有问题。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?) {
}
})
在表格Layout.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?) {
}
})
您是否尝试过使用onTabReselected
?因为这意味着该选项卡已经被选中,并且再次被选中。因此,您还需要检查选项卡位置并再次执行该操作。您是否尝试过使用onTabReselected
?因为这意味着该选项卡已经被选中,并且再次被选中。因此,您还需要检查选项卡位置并再次执行该操作。