<android.support.design.widget.TabLayout
android:id="@+id/homepage_child_tablayout"
style="@style/Homepage.TabLayout"
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="@color/white"
app:tabGravity="center"
app:tabRippleColor="@null"
app:tabTextColor="@color/color_999999"
app:tabSelectedTextColor="@color/color_19c8a9"
app:tabMode="scrollable" />
<com.click.widgets.viewpages.SuperViewPager
android:id="@+id/homepage_child_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
一般情况下我们会使用setupWithViewPager(homepageChildViewpager)将TabLayout和ViewPager关联起来
//将TabLayout和ViewPager关联起来。setupWithViewPager必须在ViewPager.setAdapter()之后调用
homepageChildTablayout.setupWithViewPager(homepageChildViewpager);
但是setupWithViewPager有一些坑需要我们了解,查看setupWithViewPager源码得知
this.removeAllTabs(); 会移除我们之前添加的view。
void populateFromPagerAdapter() {
this.removeAllTabs();
if (this.pagerAdapter != null) {
int adapterCount = this.pagerAdapter.getCount();
int curItem;
for(curItem = 0; curItem < adapterCount; ++curItem) {
this.addTab(this.newTab().setText(this.pagerAdapter.getPageTitle(curItem)), false);
}
if (this.viewPager != null && adapterCount > 0) {
curItem = this.viewPager.getCurrentItem();
if (curItem != this.getSelectedTabPosition() && curItem < this.getTabCount()) {
this.selectTab(this.getTabAt(curItem));
}
}
}
}
知道了问题,请看解决方法:
方法一:重新setPagerAdapter方法中重新父类getPageTitle方法
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return categories.get(position).getText();
}
方法二:不用 setupWithViewPager方法
addOnTabSelectedListener();
addOnPageChangeListener();