使用Tablayout出现标题消失的原因:setupWithViewPager()的大坑

Posted 大风哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Tablayout出现标题消失的原因:setupWithViewPager()的大坑相关的知识,希望对你有一定的参考价值。

TabLayout使用addTab方法添加标题,调用setupWithViewPager方法绑定ViewPager
tabLayout.addTab(tabLayout.newTab().setText("全部"));
tabLayout.addTab(tabLayout.newTab().setText("Ping²it"));
tabLayout.addTab(tabLayout.newTab().setText("同款"));
allArtPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(),fragmentList));
allArtPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
allArtPager.setCurrentItem(articleClass);

tabLayout.setupWithViewPager(allArtPager);

这时候添加的标题却不显示了
查看TabLayout封装的setupWithViewPager方法的源码。

removeAllTabs();它竟然把之前添加的title全部被清空,自己又new新的title,所以我们之前添加的标题都不见了。

对于这个问题我有两种解决办法:

方法一:可以执行完setupWithViewPager()后,再添加标题,
       tabLayout.setupWithViewPager(allArtPager);
       tabLayout.getTabAt(0).setText("全部");
tabLayout.getTabAt(1).setText("Ping²it");
tabLayout.getTabAt(2).setText("同款");

方法二:查看源码,TabLayout执行完removeAllTabs后,new新的Tabs,它调用的PagerAdapter中的方法getPageTitle();所以我们可以在PagerAdapter中添加Titles


public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> fragments;
private String[] titles = new String[]{"全部", "Ping²it", "同款", "尖儿货", "场景","BRAND", "态度", "MESSAGE"};
public MyFragmentPagerAdapter(FragmentManager fragmentManager, ArrayList<Fragment> fragments) {
super(fragmentManager);
this.fragments=fragments;
}

@Override
public Fragment getItem(int position) {
return fragments.get(position);
}

@Override
public int getCount() {
return fragments.size();
}

@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
}

个人感觉还是第二种方法方便实用,Tablayout源码中使用removeAllTabs,又调用PagerAdapter的getPageTitle()方法,本身就是想在PagerAdapter中获取title。



以上是关于使用Tablayout出现标题消失的原因:setupWithViewPager()的大坑的主要内容,如果未能解决你的问题,请参考以下文章

焦点在 EditText 上时 ViewPager2 片段内容消失

切换片段后,Android TabLayout 不再显示内容

在tablayout中替换片段

Tablayout 标题不出现

出现梯度消失和梯度爆炸的原因及解决方案

如何使用tablayout和片段管理java文件[关闭]