onTabSelected选择未调用

Jul*_*oro 42 tabs android

我刚刚将旧的迁移ActionBar到了新的TabLayout(支持材料设计).

一切都很棒,但我无法截取选项卡选择该方法onTabSelected仅在第一次TabLayout显示时被调用,但是当单击选项卡时,没有任何反应!知道这段代码有什么问题吗?

 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);
Run Code Online (Sandbox Code Playgroud)

ian*_*ake 95

当你打电话时setupWithViewPager,这将在内部呼叫setOnTabSelectedListener(new ViewPagerOnTabSelectedListener(viewPager));,覆盖你的OnTabSelectedListener.

相反,你的听众应该扩展TabLayout.ViewPagerOnTabSelectedListener,然后覆盖onTabSelected()并调用setOnTabSelectedListener()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();
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 你是现场,这为我解决了类似的错误.但是,TabLayout.OnTabSelectedListener的文档中没有提到这一事实.你的答案应该放在官方的android文档中.我的主要参考应该是文档,而不是堆栈溢出.再次感谢您的回答. (9认同)
  • 以上答案是对的!但是没有必要扩展监听器.只需在tabLayout.setOnTabSelectedListener解析之前调用tabLayout.setupWithViewPager(mViewPager). (2认同)