android - onTabSelected 选定未调用

标签 android tabs

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

一切都很好,但我无法拦截选项卡选择 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);

最佳答案

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

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

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

关于android - onTabSelected 选定未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30904265/

相关文章:

html - 加载页面或单击其他位置时,选项卡 CSS 不会在事件选项卡上保持突出显示状态

javascript - 使用javascript获取另一个标签的cookie

c# - 移动跨平台游戏开发的最佳编程语言

android - 如何在一个在Android中也有侧面抽屉导航的 Activity 中制作标签?

android - 为什么我应该使用 OkHttp 而不是 android httpClient 和 AsyncTask

java - 如何设置 relativelayout 高度等于它的宽度?

vim - 像缓冲区一样使用 Vim 的选项卡

emacs - clojure 模式下的注释缩进似乎很困惑

Android gradle 实验性插件路线图

android - 与 Gradle 相比,使用 Bazel 的额外优势是什么?