setOnTabSelectedListener is deprecated
Asked Answered
Z

4

74

I always see a crossed out line setOnTabSelectedListener for the following code

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

And the error shown is:

setOnTabSelectedListener is deprecated

However, the program seems to work just fine. May I know what's going on?

Zygophyte answered 21/7, 2016 at 8:21 Comment(0)
S
214

May i know whats going on ?

Deprecated means that they decided this is not a good way to do it or they have found a better way of doing it, and this deprecated method will be removed in the future.

The fix is to use addOnTabSelectedListener instead of setOnTabSelectedListener.
It works almost the same way.

The difference is that with addOnTabSelectedListener:

  • you can add multiple listeners. With setOnTabSelectedListener you could only have one.
  • you should remove the listener when you're done with it, with removeOnTabSelectedListener.

General rule of thumb: never use deprecated methods.

Saprogenic answered 21/7, 2016 at 8:25 Comment(4)
upvote for detailed answer covering all points, but I think 'fix is to use addOnTabSelectedListener' should be in bold to quickly find the answerVirtuosic
@ShirishHerwade my goal is not to provide a quick answer, but to provide a complete answer. I think the explanation is as important as the solution :-)Saprogenic
Thank @Saprogenic Castelijns it's helpfu but when am i supposed to use removeOnTabSelectedListener.? is it on onTabUnselected or onTabReselected?Isogamy
@eLi you use that when you no longer want to listen to tabSelected events. In practice, this is almost never requiredSaprogenic
D
21

As setOnTabSelectedListener is deprecated now, you can use the new method

addOnTabSelectedListener(OnTabSelectedListener)

This change allows to add multiple tab selection listeners to a single TabLayout.

Dale answered 21/7, 2016 at 8:25 Comment(2)
Any use case scenario for multiple listeners?Dishman
What do you mean? For adding multiple listeners, just add each listener with this methodDale
K
10

in kotlin usage like below code;

   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
                }


            })
Kelp answered 23/10, 2019 at 11:22 Comment(0)
G
5

Use below codes instead :

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

And if you want to sync them when clicking on tabs or swiping the viewpager above codes are the key for syncing.

Gore answered 21/5, 2017 at 10:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.