如何在TabLayout中获取当前选定的选项卡索引?

40

当我使用ActionBar选项卡时,我使用这段代码。

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

    return selectedTab.getPosition();
}

但是我该如何使用TabLayout实现它呢?


int tab_position = tabLayout.getSelectedTabPosition(); 不需要覆盖,也可以实现相同的效果。我已经尝试过使用targetSDK=24来实现。 - Swanand Keskar
5个回答

82

使用OnTabSelectedListener

然后在此侦听器中获取getPosition()

类似于这样:

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

更新

该方法setOnTabSelectedListener()已经过时。请使用addOnTabSelectedListener(OnTabSelectedListener)


10
请注意,如果您使用的是 setupWithViewPager() 方法,则应该扩展 TabLayout.ViewPagerOnTabSelectedListener 而不是 TabLayout.OnTabSelectedListener,并且在调用 setupWithViewPager() 后要确保调用它,以便默认集成 ViewPager 功能。 - ianhanniballake
6
setOnTabSelectedListener() 现已过时。 - ban-geoengineering
5
此方法 setOnTabSelectedListener() 已被弃用。 请改用 addOnTabSelectedListener(OnTabSelectedListener) - Badr
在重新创建后,onTabSelected会使用默认值0进行调用,我该如何保存上次选择的选项卡? - yozhik

38

setOnTabSelectedListener现在已被弃用,您可以使用addOnTabSelectedListener代替。要删除侦听器,您可以使用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) {
        }
    });

32
你可以通过调用你的 TabLayout 实例上的 getSelectedTabPosition() 来轻松实现,例如:
int tab_position=tabLayout.getSelectedTabPosition();

并且在Kotlin中

val tabPosition = mTabLayout.selectedTabPosition

4
如果你想要实际的选项卡,可以使用 tabLayout.getTabAt(layout.selectedTabPosition) - lasec0203

0

如果你正在使用在ViewPager内部的TabLayout(并且用setupWithViewPager()初始化),你可以使用ViewPager实例来完成它。

    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

0
如果您正在使用带有ViewPager的选项卡,则可以按照以下方式完成所需任务:
在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);
    }
});

1
setOnTabSelectedListener现在已经过时,您可以使用addOnTabSelectedListener。请参见Doron的回复https://dev59.com/IF0Z5IYBdhLWcg3wrSAr#38094050 - pask23

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