仅在切换选项卡时调用TabLayoutOnPageChangeListener onTabReselected

时间:2015-09-24 16:44:52

标签: android android-viewpager android-tablayout

我设置了ViewPager TabLayout,如下所示:

tabLayoutOnPageChangeListener = new TabLayout.TabLayoutOnPageChangeListener(tabLayout);

mViewPager.addOnPageChangeListener(tabLayoutOnPageChangeListener);

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        mViewPager.setCurrentItem(tab.getPosition());
    }

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

    }

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

因此,当我滑动ViewPager时,TabLayout会更新其指标和所选标签;选择标签后,ViewPager将更改为正确的页面。

但即使我没有重新选择标签,这也会导致onTabReselected被调用,因为在onTabSelected之后,mViewPager.setCurrentItem()会再次触发标签选择(通过tabLayoutOnPageChangeListener)。我必须这样做:

@Override
public void onTabSelected(TabLayout.Tab tab) {
    mViewPager.removeOnPageChangeListener(tabLayoutOnPageChangeListener);
    mViewPager.setCurrentItem(tab.getPosition());
    mViewPager.addOnPageChangeListener(tabLayoutOnPageChangeListener);
}

在调用setCurrentItem()时临时删除侦听器。

是否有更多权利"让ViewPagerTabLayout合作的方法?我使用的是最新的v23.0.1设计支持库。

1 个答案:

答案 0 :(得分:1)

TabLayout的{​​{3}}方法可用于此目的。您应该可以使用tabLayout.setupWithViewPager(mViewPager)替换代码。