我的ViewLager附带的TabLayout存在问题。 Repro步骤:
viewPager.setCurrentItem(0)
将用户返回到第一个标签页。 我错过了什么?
tabLayout = (TabLayout) rootView.findViewById(R.id.tab_layout_main);
tabLayout.addTab(tabLayout.newTab().setText(getActivity().getString(R.string.main_tab_grades)));
tabLayout.addTab(tabLayout.newTab().setText(getActivity().getString(R.string.main_tab_schedule)));
viewPager = (NonSwipeableViewPager) rootView.findViewById(R.id.pager_main);
pagerAdapter = new PagerAdapterMain(getActivity(), getChildFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(pagerAdapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
return;
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
return;
}
});
答案 0 :(得分:7)
也许这是设计库的错误。正如问题所说: https://code.google.com/p/android/issues/detail?id=192834
代码对我有用:
// mViewPager.setCurrentItem(position);
mTabLayout.getTabAt(position).select();
答案 1 :(得分:5)
您可以尝试通过tablayout而不是viewPager选择标签。
tabLayout.getTabAt(0).select();
答案 2 :(得分:1)
面临独特的问题。当我们设置setCurrentItem时。它不会更改tablayout的选项卡。然后你必须在viewpager上添加onOPageChangeListener,你必须手动为所选的viewpager的位置选择tablayout的选项卡。然后setupWithViewPager。
注意:只有在添加addOnPageChangeListener后才需要设置setupWithViewPager。天知道为什么。这是有效的。如果我以前setupWithViewPager,它不起作用。再一次,全能者只知道。
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
viewPager.setCurrentItem(position,false);
tabLayout.getTabAt(position).select();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
/*
NOTE: This is setup after addOnPageChangeListener. Don't know why but this is what works. Otherwise tabLayout.does not select.
*/
tabLayout.setupWithViewPager(this.viewPager);
答案 3 :(得分:1)
以上都没有工作......最后固定设置滚动位置
tabLayout.setScrollPosition(position,0f,true);
答案 4 :(得分:0)
tabLayout.getTabAt(0).getCustomView()的setSelected(真)。 我不认为它是TabLayout的错误,如果你想设置第一个视图突出显示,你应该调用像我这样的方法,然后你设置的customView将被无效
答案 5 :(得分:0)
我添加这可以修复此错误: tabLayout.getTabAt(0).getCustomView()的setSelected(真);
答案 6 :(得分:0)
我修复了它升级到com.android.support:design:23.4.0版本23.1.0有问题。