不推荐使用setOnTabSelectedListener

gos*_*ove 65 android

我总是看到一个划掉的行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());
    }
}
Run Code Online (Sandbox Code Playgroud)

并且显示的错误是:

不推荐使用setOnTabSelectedListener

但是,该程序似乎工作得很好.我可以知道发生了什么事吗?

Tim*_*Tim 190

我可以知道最新情况吗?

弃用意味着他们认为这不是一个好方法,或者他们已经找到了更好的方法,这个弃用的方法将来会被删除.

修复方法是使用addOnTabSelectedListener而不是setOnTabSelectedListener.
它的工作方式几乎相同.

区别在于addOnTabSelectedListener:

  • 您可以添加多个侦听器.随着setOnTabSelectedListener你只能有一个.
  • 使用removeOnTabSelectedListener时,应该在完成后删除侦听.

一般经验法则:永远不要使用弃用的方法.

  • @ShirishHerwade我的目标不是提供快速回答,而是提供完整的答案.我认为解释和解决方案一样重要:-) (13认同)
  • 当您不想再听tabSelected事件时,可以使用@eLi。实际上,几乎不需要 (2认同)

Cho*_*hol 19

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

addOnTabSelectedListener(OnTabSelectedListener)
Run Code Online (Sandbox Code Playgroud)

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


小智 8

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


            })
Run Code Online (Sandbox Code Playgroud)


Had*_*ote 5

改用以下代码:

tablayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager));
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tablayout));
Run Code Online (Sandbox Code Playgroud)

如果你想在点击标签或滑动浏览器时同步它们,上面的代码是同步的关键。