使用如下两步后造成TabLayout的标题没有显示
- mTablayout.addTab(mTablayout.newTab().setText(titles.get(i)));
- mTablayout.setupWithViewPager(mViewPager);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_coordinator_layout);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
ab.setDisplayHomeAsUpEnabled(false);
mViewPager = findViewById(R.id.viewpager);
initViewPager();
}
private void initViewPager() {
mTablayout = findViewById(R.id.tabs);
List<String> titles = new ArrayList<>();
titles.add("体育");
titles.add("巴萨");
titles.add("购物");
titles.add("明星");
titles.add("视频");
titles.add("健康");
titles.add("励志");
titles.add("图文");
titles.add("本地");
titles.add("动漫");
titles.add("搞笑");
titles.add("精选");
for (int i = 0; i < titles.size(); i++) {
mTablayout.addTab(mTablayout.newTab().setText(titles.get(i)));
}
final List<Fragment> fragments = new ArrayList<>();
for (int i = 0; i < titles.size(); i++) {
fragments.add(new ListFragment());
}
MyAdapter mAdapter = new MyAdapter(getSupportFragmentManager(),0, fragments);
mViewPager.setAdapter(mAdapter);
mTablayout.setupWithViewPager(mViewPager);
从TabLayout中的setupWithViewPager(@Nullable ViewPager viewPager)开始分析
首先
public void setupWithViewPager(@Nullable ViewPager viewPager) {
this.setupWithViewPager(viewPager, true);
}
最终调用了
private void setupWithViewPager(@Nullable ViewPager viewPager, boolean autoRefresh, boolean implicitSetup) {
...
if (adapter != null) {
this.setPagerAdapter(adapter, autoRefresh);
}
...
}
主要是setPagerAdapter方法中调用了this.populateFromPagerAdapter();
void setPagerAdapter(@Nullable PagerAdapter adapter, boolean addObserver) {
if (this.pagerAdapter != null && this.pagerAdapterObserver != null) {
this.pagerAdapter.unregisterDataSetObserver(this.pagerAdapterObserver);
}
this.pagerAdapter = adapter;
if (addObserver && adapter != null) {
if (this.pagerAdapterObserver == null) {
this.pagerAdapterObserver = new TabLayout.PagerAdapterObserver();
}
adapter.registerDataSetObserver(this.pagerAdapterObserver);
}
this.populateFromPagerAdapter();
}
接下来看populateFromPagerAdapter();
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));
}
}
}
}
在此方法中this.removeAllTabs();移除了所有的TabItem,然后重新添加
this.addTab(this.newTab().setText(this.pagerAdapter.getPageTitle(curItem)), false);
所以造成前面设置的标题全部清除了;
解决办法是在setupWithViewPager函数调用后再设置tab的标题,并在之前不需要 执行mTablayout.addTab(mTablayout.newTab().setText(titles.get(i)));
解决方法:
1.mTablayout.setupWithViewPager(mViewPager);
2.for (int i = 0; i < titles.size(); i++) {
mTablayout.getTabAt(i).setText(titles.get(i));
}