不推荐使用setOnTabSelectedListener

时间:2016-07-21 08:21:06

标签: 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());
    }
}

显示的错误是:

  

不推荐使用setOnTabSelectedListener

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

5 个答案:

答案 0 :(得分:175)

  

我可以知道最新情况吗?

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

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

区别在于addOnTabSelectedListener

  • 您可以添加多个侦听器。使用setOnTabSelectedListener,您只能拥有一个。
  • 使用removeOnTabSelectedListener时,您应该删除听众。

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

答案 1 :(得分:19)

由于setOnTabSelectedListener现已弃用,您可以使用新方法

addOnTabSelectedListener(OnTabSelectedListener)

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

答案 2 :(得分:3)

请改用以下代码:

$clinic_id = auth()->user()->clinic_id;

$users = User::whereHas('roles', function ($query) {
    $query->where('name', 'admin');
})->where('clinic_id', $clinic_id)->get();

如果您想在点击标签时同步它们,或者点按上面的viewpager代码是同步的关键。

答案 3 :(得分:1)

在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 :(得分:0)

检查我的答案here以获得更新的方法用法addOnTabSelectedListener