TabLayout联动Viewpager不显示图标的问题
以前都是用布局做容器来管理外层模块,直接使用fragmentmanager管理器来管理fragment,使用比较麻烦,一直想封装,可是没做完。使用 ViewPager 管理 fragment 很方便,但是在 Tablayout 和 Viewpager 进行关联的时候,设置的图标和自定义的View不能显示,只显示文字。这个文字是从adapter中获取的。检查 Tablayout 的源码,在 populateFromPagerAdapter() 里发现了 removeAllTabs() 这一句。分析得知,在关联的时候,Tablayout 就把原来的 tab 全都清空了,然后用从 adapter 中的 getPageTitle() 获得的标题重新添加了tab。难怪只显示文字。
网上很多例子都是重写 Tablayout,这里不多说,有时间再补充上。
本来也想过反射,只是思路还不清楚。后来想到,既然你清除tab后重新添加,我为什么不能再添加一次。一般我们的习惯都是把TabLayout设置完了在与ViewPager关联,
其实跟据上面的得到的原因,这个问题可以很容易就解决了,那就是重新添加 tab 或者注意添加图标的顺序。
mTabLayout = findViewById(R.id.tabs);
... ... //添加Tab
for (int i = 0; i < mTabLayout.getTabCount(); i++) {
mTabLayout.getTabAt(i).setText(clampModels.get(i).getName()).setIcon(R.drawable.ico);
}
... ...//添加fragment
FragmentAdapter mFragmentAdapter =
new FragmentAdapter(getSupportFragmentManager(), fragments, titles);
mViewPager.setAdapter(mFragmentAdapteradapter);//给ViewPager设置适配器
mTabLayout.setupWithViewPager(mViewPager);//将TabLayout和ViewPager关联起来。
//下面是重新添加Tab,添加之后图片就显示出来
for (int i = 0; i < titles.size(); i++) {
mTabLayout.getTabAt(i).setText(titles.get(i)).setIcon(R.drawable.ico);
}