【问题标题】:TabLayout v23 doesn't scroll with ViewPager scrollTabLayout v23 不随 ViewPager 滚动而滚动
【发布时间】:2015-09-07 23:23:47
【问题描述】:
使用新的设计支持库 23.0.0,TabLayout 的选项卡在您拖动关联的 ViewPager 时不会滚动。仅当您完成拖动并向上单击时(当已选择选项卡时),选项卡才会滚动。这在 22.2.1 上运行良好
我是否必须添加更多内容才能使其像在 22.2.1 中一样工作?它是一个错误吗?有解决办法吗?
编辑
在最新版本 23.0.1 中修复了错误
【问题讨论】:
标签:
android
androiddesignsupport
android-tablayout
【解决方案1】:
这里有一个解决方法,由Chris Banes(设计支持库的主要开发者)提出。这个问题在 Google 问题页面 here 上提到,并在 here 解决。
设置ViewPager时输入此代码:
viewPager.clearOnPageChangeListeners();
viewPager.addOnPageChangeListener(new TabLayoutOnPageChangeListener(tabLayout));
同时添加这个类:
private static class TabLayoutOnPageChangeListener implements ViewPager.OnPageChangeListener {
private final WeakReference<TabLayout> mTabLayoutRef;
private int mPreviousScrollState;
private int mScrollState;
public TabLayoutOnPageChangeListener(TabLayout tabLayout) {
mTabLayoutRef = new WeakReference<>(tabLayout);
}
@Override
public void onPageScrollStateChanged(int state) {
mPreviousScrollState = mScrollState;
mScrollState = state;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
final TabLayout tabLayout = mTabLayoutRef.get();
if (tabLayout != null) {
final boolean updateText = (mScrollState == ViewPager.SCROLL_STATE_DRAGGING)
|| (mScrollState == ViewPager.SCROLL_STATE_SETTLING
&& mPreviousScrollState == ViewPager.SCROLL_STATE_DRAGGING);
tabLayout.setScrollPosition(position, positionOffset, updateText);
}
}
@Override
public void onPageSelected(int position) {
final TabLayout tabLayout = mTabLayoutRef.get();
if (tabLayout != null) {
tabLayout.getTabAt(position).select();
}
}
}