onTabSelected 选定未调用 [英] onTabSelected Selected Not Called

查看:11
本文介绍了onTabSelected 选定未调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚将旧的 ActionBar 迁移到新的 TabLayout(支持 Material Design).

I have just migrated my old ActionBar to new TabLayout ( Support Material Design ).

一切都很好,但我无法拦截选项卡选择onTabSelected 方法只在 TabLayout 第一次显示时被调用,但是当点击标签时,什么也没有发生!知道这段代码有什么问题吗?

Everything is great but I can't intercept tab selection The method onTabSelected is only called the first time TabLayout is displayed, but when clicking tabs, nothing happens! Any idea what's wrong with this code?

 tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
    mViewPager = (ViewPager) findViewById(R.id.pager);
    if (mViewPager != null) {
        setupViewPager();
    }
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {

            numTab = tab.getPosition();
            prefs.edit().putInt("numTab", numTab).apply();

        }

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

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

    tabLayout.setupWithViewPager(mViewPager);

推荐答案

当你调用 setupWithViewPager 时,这将在内部调用 setOnTabSelectedListener(new ViewPagerOnTabSelectedListener(viewPager));,覆盖您的 OnTabSelectedListener.

When you call setupWithViewPager, this will internally call setOnTabSelectedListener(new ViewPagerOnTabSelectedListener(viewPager));, overriding your OnTabSelectedListener.

相反,您的监听器应该扩展 TabLayout.ViewPagerOnTabSelectedListener,然后覆盖 onTabSelected() 并在 setupWithViewPager() 之后调用 setOnTabSelectedListener():

Instead, your listener should extend TabLayout.ViewPagerOnTabSelectedListener, then override onTabSelected() and call setOnTabSelectedListener() after setupWithViewPager():

tabLayout.setupWithViewPager(mViewPager);
tabLayout.setOnTabSelectedListener(
  new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        super.onTabSelected(tab);
        numTab = tab.getPosition();
        prefs.edit().putInt("numTab", numTab).apply();
    }
});

这篇关于onTabSelected 选定未调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆