不推荐使用setOnTabSelectedListener


71

我总是看到以下代码的划线为setOnTabSelectedListener的行

viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        viewPager.setCurrentItem(tab.getPosition());
    }
}

并且显示的错误是:

不推荐使用setOnTabSelectedListener

但是,该程序似乎运行良好。我可以知道发生了什么吗?

Answers:


208

我可以知道发生了什么吗?

已弃用意味着他们认为这样做不是一个好方法,或者他们已经找到了一种更好的方法,并且将来会删除此已弃用的方法。

解决方法是使用addOnTabSelectedListener而不是setOnTabSelectedListener
它的工作方式几乎相同。

区别在于addOnTabSelectedListener

  • 您可以添加多个侦听器。与setOnTabSelectedListener你只能有一个。
  • 完成后,应使用removeOnTabSelectedListener删除监听

一般经验法则:永远不要使用不推荐使用的方法。


支持涵盖所有要点的详细答案,但我认为“修复是使用addOnTabSelectedListener”应以粗体显示以快速找到答案
Shirish Herwade

13
@ShirishHerwade我的目标不是提供快速答案,而是提供完整的答案。我认为解释和解决方案一样重要:-)
Tim

1
感谢@Tim Castelijns这是帮助,但是我什么时候应该使用removeOnTabSelectedListener。是onTabUnselected还是onTabReselected?
eli

2
当您不想再听tabSelected事件时,可以使用@eLi。实际上,几乎不需
Tim

21

由于setOnTabSelectedListener现在已经过时,你可以使用新的方法

addOnTabSelectedListener(OnTabSelectedListener)

此更改允许将多个选项卡选择侦听器添加到单个TabLayout


任何针对多个侦听器的用例场景?
塔哈(Talha)

你什么意思?要添加多个侦听器,只需使用此方法添加每个侦听器
Chol

5

在kotlin中的用法如下代码;

   tabLayoutView.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
                override fun onTabReselected(p0: TabLayout.Tab?) {
                }

                override fun onTabUnselected(p0: TabLayout.Tab?) {

                }

                override fun onTabSelected(p0: TabLayout.Tab?) {
                    viewPager.currentItem = tabLayoutView.selectedTabPosition
                }


            })

4

使用以下代码代替:

tablayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager));
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tablayout));

如果要在单击选项卡或在ViewPager上滑动时同步它们,则代码上方的代码是同步的关键。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.