onTabSelected选择不调用onTabSelected

2023-09-07 14:03:35 作者:余笙

我刚刚迁移我的老动作条新TabLayout(支持材料设计)一切都很好,但我不能拦截选项卡选择该方法onTabSelected只叫第一次显示tabLayout,但点击选项卡时,没有任何反应!任何想法有什么不对的code?

  tabLayout =(TabLayout)findViewById(R.id.tabs);    tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);    mViewPager =(ViewPager)findViewById(R.id.pager);    如果(mViewPager!= NULL){        setupViewPager();    }    tabLayout.setOnTabSelectedListener(新TabLayout.OnTabSelectedListener(){        @覆盖        公共无效onTabSelected(TabLayout.Tab标签){            numTab = tab.getPosition();            prefs.edit()putInt(numTab,numTab)。适用()。        }        @覆盖        公共无效onTabUnselected(TabLayout.Tab标签){        }        @覆盖        公共无效onTabReselected(TabLayout.Tab标签){        }    });    tabLayout.setupWithViewPager(mViewPager); 

解决方案

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

相反,你的听众应该扩展TabLayout.ViewPagerOnTabSelectedListener ,然后覆盖 onTabSelected()并调用 setOnTabSelectedListener() setupWithViewPager()

  tabLayout.setupWithViewPager(mViewPager);tabLayout.setOnTabSelectedListener(  新TabLayout.ViewPagerOnTabSelectedListener(viewPager){    @覆盖    公共无效onTabSelected(TabLayout.Tab标签){        super.onTabSelected(标签);        numTab = tab.getPosition();        prefs.edit()putInt(numTab,numTab)。适用()。    }}); 
解决 Transactional事务在类内部方法调用不生效

I have just migrated my old actionBar to new TabLayout ( Support Material Design ) 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);

解决方案

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

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

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

    }
});

 
精彩推荐
图片推荐