setOnTabSelectedListener已被弃用。

74

我总是看到以下代码中被划掉的行: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已过时

然而,程序似乎可以正常工作。我能知道发生了什么吗?

4个回答

213

可以告诉我发生了什么吗?

“Deprecated”意味着他们认为这不是一个好的方法,或者他们已经找到了一种更好的方法,因此这种过时的方法将在未来被删除。

修复方法是使用addOnTabSelectedListener代替setOnTabSelectedListener。它们几乎以相同的方式工作。

区别在于:addOnTabSelectedListener

  • 您可以添加多个侦听器。而setOnTabSelectedListener 只能有一个。
  • 完成后,应该使用removeOnTabSelectedListener来移除监听器。

经验法则:永远不要使用已弃用的方法。


请详细回答并涵盖所有要点,但我认为“修复方法是使用addOnTabSelectedListener”应该加粗以便快速找到答案。 - Shirish Herwade
14
我的目标不是提供迅速的答案,而是提供完整的答案。我认为解释和解决方案同样重要 :-) - Tim
1
谢谢@Tim Castelijns提供的帮助。但是我应该在什么时候使用removeOnTabSelectedListener呢?是在onTabUnselected还是onTabReselected中使用? - eli
2
@eLi 在实际开发中,你几乎不需要使用这个方法,它只在你不再需要监听tabSelected事件时才使用。 - Tim

21

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

addOnTabSelectedListener(OnTabSelectedListener)

这个更改允许向单个TabLayout添加多个选项卡选择监听器。


多个监听器的任何使用场景? - Talha
你是什么意思?要添加多个监听器,只需使用此方法添加每个监听器。 - Chol

10
在 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
                }


            })

5
请使用以下代码:
tablayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager));
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tablayout));

如果您希望在点击选项卡或滑动视图页面时同步它们,那么上述代码是实现同步的关键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接