TabLayout 选项卡文本在 viewPager.setCurrentItem() 后未突出显示
TabLayout tab text not highlighted after viewPager.setCurrentItem()
我的 ViewPager 附加的 TabLayout 有问题。重现步骤:
- 从第一个选项卡开始。
- Select 第二个选项卡。
- 按后退按钮——我的代码看到用户在第二个选项卡上并调用
viewPager.setCurrentItem(0)
以 return 用户到第一个选项卡。
- 但是,如图所示,第二个标签文本仍然处于选中状态,而第一个标签文本显示为灰色。 (虽然粉红色条会像它应该的那样回到第一个选项卡。)
我错过了什么?
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;
}
});
您可以尝试 select 通过 tablayout 而不是 viewPager 的选项卡。
tabLayout.getTabAt(0).select();
可能是Design Library的bug。正如问题所说:
https://code.google.com/p/android/issues/detail?id=192834
代码对我有用:
// mViewPager.setCurrentItem(position);
mTabLayout.getTabAt(position).select();
tabLayout.getTabAt(0).getCustomView().setSelected(true);
我觉得不是TabLayout的bug,如果你想设置第一个视图高亮,你应该像我一样调用方法,那么你设置的customView就会失效
我添加这个可以修复这个错误:
tabLayout.getTabAt(0).getCustomView().setSelected(真);
面临独特的问题。当我们设置 setCurrentItem 时。它不会更改 tablayout 的选项卡。然后您必须在 viewpager 上添加 addOnPageChangeListener,您必须在其中手动 select tablayout 的选项卡以 selected viewpager 的位置。然后setupWithViewPager.
注意:setupWithViewPager需要在添加addOnPageChangeListener之后设置。天知道为什么。这是有效的。如果我之前 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);
none 上面的工作...最终修复了设置滚动位置
tabLayout.setScrollPosition(position,0f,true);
我修复了它升级到 com.android.support:design:23.4.0 版本 23.1.0 有问题。
我的 ViewPager 附加的 TabLayout 有问题。重现步骤:
- 从第一个选项卡开始。
- Select 第二个选项卡。
- 按后退按钮——我的代码看到用户在第二个选项卡上并调用
viewPager.setCurrentItem(0)
以 return 用户到第一个选项卡。 - 但是,如图所示,第二个标签文本仍然处于选中状态,而第一个标签文本显示为灰色。 (虽然粉红色条会像它应该的那样回到第一个选项卡。)
我错过了什么?
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;
}
});
您可以尝试 select 通过 tablayout 而不是 viewPager 的选项卡。
tabLayout.getTabAt(0).select();
可能是Design Library的bug。正如问题所说: https://code.google.com/p/android/issues/detail?id=192834
代码对我有用:
// mViewPager.setCurrentItem(position);
mTabLayout.getTabAt(position).select();
tabLayout.getTabAt(0).getCustomView().setSelected(true); 我觉得不是TabLayout的bug,如果你想设置第一个视图高亮,你应该像我一样调用方法,那么你设置的customView就会失效
我添加这个可以修复这个错误: tabLayout.getTabAt(0).getCustomView().setSelected(真);
面临独特的问题。当我们设置 setCurrentItem 时。它不会更改 tablayout 的选项卡。然后您必须在 viewpager 上添加 addOnPageChangeListener,您必须在其中手动 select tablayout 的选项卡以 selected viewpager 的位置。然后setupWithViewPager.
注意:setupWithViewPager需要在添加addOnPageChangeListener之后设置。天知道为什么。这是有效的。如果我之前 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);
none 上面的工作...最终修复了设置滚动位置
tabLayout.setScrollPosition(position,0f,true);
我修复了它升级到 com.android.support:design:23.4.0 版本 23.1.0 有问题。