40

When I use ActionBar tabs, I use this code.

private int getCurrentTabIndex() {
    ActionBar actionBar = activity.getSupportActionBar();
    ActionBar.Tab selectedTab = actionBar.getSelectedTab();
    if(selectedTab == null){
        return 0;
    }

    return selectedTab.getPosition();
}

But how can I do it using TabLayout?

Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
Semyon Tikhonenko
  • 3,872
  • 6
  • 36
  • 61
  • int tab_position=tabLayout.getSelectedTabPosition(); same can be achieved without overriding ,I have tried it with targetSDK=24 – Swanand Keskar Jul 08 '16 at 14:57

5 Answers5

81

Use OnTabSelectedListener.

And then in this listener get the getPosition().

Something like this:

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
    @Override
    public void onTabSelected(TabLayout.Tab tab){
        int position = tab.getPosition();
    }
});

UPDATE

This method setOnTabSelectedListener() is deprecated . Use addOnTabSelectedListener(OnTabSelectedListener)

BeeBee8
  • 2,944
  • 1
  • 27
  • 39
JARP
  • 1,239
  • 12
  • 12
  • 10
    Note that if you are using [setupWithViewPager()](https://developer.android.com/reference/android/support/design/widget/TabLayout.html#setupWithViewPager(android.support.v4.view.ViewPager)) you should extend [TabLayout.ViewPagerOnTabSelectedListener](https://developer.android.com/reference/android/support/design/widget/TabLayout.ViewPagerOnTabSelectedListener.html) instead of `TabLayout.OnTabSelectedListener` and make sure to call it after `setupWithViewPager()` if you want to default integration with `ViewPager` functionality. – ianhanniballake Jul 01 '15 at 23:36
  • 6
    `setOnTabSelectedListener()` is now deprecated. – ban-geoengineering Nov 09 '16 at 02:53
  • 5
    This method `setOnTabSelectedListener()` is deprecated . Use `addOnTabSelectedListener(OnTabSelectedListener)` instead. – Badr Feb 20 '17 at 20:49
  • onTabSelected is called with default value 0 after recreation, how can I save the last selected tab? – yozhik Apr 17 '18 at 07:48
38

setOnTabSelectedListener is now deprecated. you can use addOnTabSelectedListener instead. To remove the listener you can use removeOnTabSelectedListener

 mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            int position = tab.getPosition();
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });
Adarsh
  • 2,219
  • 2
  • 23
  • 37
DoronK
  • 4,837
  • 2
  • 32
  • 37
32

You can simply do it by calling getSelectedTabPosition() on your TabLayout instance like:

int tab_position=tabLayout.getSelectedTabPosition();

and in Kotlin

val tabPosition = mTabLayout.selectedTabPosition
EdgeDev
  • 2,376
  • 2
  • 20
  • 37
Swanand Keskar
  • 1,023
  • 1
  • 13
  • 27
0

if you are using tabs with viewpager then the asked task could be done as follows:

use the following code after tabLayout.setUpWithViewPager(viewPager)

tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
        switch(tab.getPosition()){
            // do something here
        }
        super.onTabSelected(tab);
    }
});
Junaid
  • 4,822
  • 2
  • 21
  • 27
  • 1
    setOnTabSelectedListener is now deprecated, you can use addOnTabSelectedListener. see reply of Doron http://stackoverflow.com/a/38094050/1970301 – pask23 Mar 23 '17 at 12:17
0

If you are using TabLayout inside ViewPager (and initializing it with setupWithViewPager()), you can do it using ViewPager instance.

    View view = inflater.inflate(R.layout.fragment_view_pager_tabs, container, false);
    ViewPager viewPager = view.findViewById(R.id.view_pager_tabs);
    viewPager.setAdapter(pagerAdapter);
    TabLayout tabLayout = viewPager.findViewById(R.id.tab_layout);
    tabLayout.setupWithViewPager(viewPager);
    int item = viewPager.getCurrentItem(); // get
    viewPager.setCurrentItem(item, true);  // set
B-GangsteR
  • 2,534
  • 22
  • 34