我的代码一直运行良好,直到我升级到设计库23.
我升级了:
compile 'com.android.support:design:22.2.0'
到
compile 'com.android.support:design:23.0.0'
以下是发生的事情:我打开了我的应用。我滑到第二个标签。然后我点击第一个标签,没有任何反应。回调表明onTabSelectedListener
认为我正在重新选择第一个标签,即使我已经通过刷卡进入第二个标签,现在又回来了。
TL; DR - 当我滑动到其他页面时,标签选择没有更新(即使动画看起来像是同步的)
以下是我一直在使用的代码:
TabLayout tabLayout = (TabLayout) rootView.findViewById(R.id.tab_layout_main);
tabLayout.addTab(tabLayout.newTab().setText("Grades"));
tabLayout.addTab(tabLayout.newTab().setText("Schedule"));
viewPager = (NonSwipeableViewPager) rootView.findViewById(R.id.pager_main);
pagerAdapter = new PagerAdapterMain(getActivity(), getChildFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(pagerAdapter);
viewPager.setOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
//String tag = ((PagerAdapterMain) viewPager.getAdapter()).getRegisteredFragment(viewPager.getCurrentItem()).getTag();
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
我正在使用自定义NonSwipeableViewPager以防止从第二个标签滑动。它会覆盖以下回调:
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Disable swiping on the 2nd tab ONLY
switch(getCurrentItem()){
case 1:
return false;
default:
return super.onInterceptTouchEvent(event);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Disable swiping on the 2nd tab ONLY
switch(getCurrentItem()){
case 1:
return false;
default:
return super.onTouchEvent(event);
}
}
有什么想法吗?我玩过较新的viewPager.addONPageChangeListener
和TabLayout.ViewPagerOnTabSelectedListener
,但没有运气。