我们现在常用的底部或者顶部导航栏很多都是使用TabLayout+ViewPager+Fragment实现的,最近有空分析一下TabLayout和ViewPager两者之间关联的原理
主要就是一行代码实现两者之间的关联:tabLayout.setupWithViewPager(viewPager);
现在来看下实现的原理:经过两次重载走到下面的方法内部
private void setupWithViewPager(@Nullable ViewPager viewPager, boolean autoRefresh, boolean implicitSetup) {
//清除之前的监听器
if (this.viewPager != null) {
if (this.pageChangeListener != null) {
this.viewPager.removeOnPageChangeListener(this.pageChangeListener);
}
if (this.adapterChangeListener != null) {
this.viewPager.removeOnAdapterChangeListener(this.adapterChangeListener);
}
}
if (this.currentVpSelectedListener != null) {
this.removeOnTabSelectedListener(this.currentVpSelectedListener);
this.currentVpSelectedListener = null;
}
if (viewPager != null) {
this.viewPager = viewPager;
if (this.pageChangeListener == null) {
this.pageChangeListener = new TabLayout.TabLayoutOnPageChangeListener(this);
}
this.