我设置了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()
时临时删除侦听器。
是否有更多权利"让ViewPager
与TabLayout
合作的方法?我使用的是最新的v23.0.1设计支持库。
答案 0 :(得分:1)
TabLayout
的{{3}}方法可用于此目的。您应该可以使用tabLayout.setupWithViewPager(mViewPager)
替换代码。