看源码: setupWithViewPager里面有这段
final PagerAdapter adapter = viewPager.getAdapter();
if (adapter != null) {
// Now we'll populate ourselves from the pager adapter, adding an observer if
// autoRefresh is enabled
setPagerAdapter(adapter, autoRefresh);
}
setPagerAdapter里面有populateFromPagerAdapter
void populateFromPagerAdapter() {
removeAllTabs();
......
}
看到了么,会把之前所有设置的TABS清空。那么解决方案就很简单。先关联,在设置
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
int i = tabLayout.getSelectedTabPosition();
Log.e("onTabSelected", i + "");
tab.setIcon(licons_p[i]);
mViewPager.setCurrentItem(i);
//tabLayout.setTabTextColors(Color.BLACK, Color.RED);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
int i = tabLayout.getSelectedTabPosition();
Log.e("onTabUnselected", i + "");
tab.setIcon(licons[i]);
//tabLayout.setTabTextColors(Color.BLACK, Color.BLACK);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
(先不看注释部分)我们一般都按照上面的写,但是文字颜色在切换的时候会有问题。 当我们先点击Tab1,再点击Tab2的时候(仅计算Tab2的步骤)。会先调用onTabUnselected,然后调用onTabSelected。基于这样的调用,我们可以在onTabUnselected里面先恢复到默认的颜色,然后再在onTabSelected设置点击的颜色
最后附上我的代码
public class MainActivity extends AppCompatActivity {
private TabLayout tabLayout;
private ViewPager mViewPager;
private List<String> mTitleList = new ArrayList<>();//页卡标题集合
private List<Fragment> mFragmentList = new ArrayList<>();
//未选中状态的icon数组
int licons[] = {R.drawable.custom, R.drawable.stock, R.drawable.order};
//选中状态下的icon数组
int licons_p[] = {R.drawable.custom_p, R.drawable.stock_p, R.drawable.order_p};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTitleList.add("商户");
mTitleList.add("名字");
mTitleList.add("出售");
mFragmentList.add(new AFragment());
mFragmentList.add(new BFragment());
mFragmentList.add(new CFragment());
mViewPager = (ViewPager) findViewById(R.id.viewpager);
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
MyAdpter mAdapter = new MyAdpter(getSupportFragmentManager(), mFragmentList);
mViewPager.setAdapter(mAdapter);
mViewPager.setOffscreenPageLimit(3);
mViewPager.setCurrentItem(0);
forIconAndText();
}
/**
* 文字图片都有的情况
*/
private void forIconAndText() {
tabLayout.setupWithViewPager(mViewPager);//将TabLayout和ViewPager关联起来。
//setupWithViewPager里面有removeAllTabs,所以关联以后在添加
tabLayout.removeAllTabs();
for (int i = 0; i < mTitleList.size(); i++) {
tabLayout.addTab(tabLayout.newTab().setIcon(licons[i]).setText(mTitleList.get(i)));
}
tabLayout.getTabAt(0).setIcon(licons_p[0]);
tabLayout.setTabTextColors(Color.BLACK, Color.RED);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
int i = tabLayout.getSelectedTabPosition();
Log.e("onTabSelected", i + "");
tab.setIcon(licons_p[i]);
mViewPager.setCurrentItem(i);
tabLayout.setTabTextColors(Color.BLACK, Color.RED);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
int i = tabLayout.getSelectedTabPosition();
Log.e("onTabUnselected", i + "");
tab.setIcon(licons[i]);
tabLayout.setTabTextColors(Color.BLACK, Color.BLACK);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
/**
* 只有文字的情况
*/
private void onlyForText() {
tabLayout.removeAllTabs();
for (int i = 0; i < mTitleList.size(); i++) {
tabLayout.addTab(tabLayout.newTab().setIcon(licons[i]).setText(mTitleList.get(i)), i == 0 ? true : false);
}
tabLayout.setTabTextColors(Color.BLACK, Color.RED);
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
}
}