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
?因为这意味着该选项卡已经被选中,并且再次被选中。因此,您还需要检查选项卡位置并再次执行该操作。