TabLayout tabs text not displaying
The problem is you're calling setupWithViewPager()
after setting up your tabs with the addTab()
calls, effectively overwriting them.
From the documentation of TabLayout
regarding setupWithViewPager()
:
The tabs displayed in this layout will be populated from the
ViewPager
adapter's page titles.
If you would like to use your TabLayout
with a ViewPager
, you should override getPageTitle()
in your PagerAdapter
(and remove the addTab()
calls, they are redundant).
For example:
public class ExamplePagerAdapter extends FragmentStatePagerAdapter { // tab titles private String[] tabTitles = new String[]{"Tab1", "Tab2", "Tab3"}; public ExamplePagerAdapter(FragmentManager fm) { super(fm); } // overriding getPageTitle() @Override public CharSequence getPageTitle(int position) { return tabTitles[position]; } @Override public Fragment getItem(int position) { switch (position) { case 0: return new Tab1Fragment(); case 1: return new Tab2Fragment(); case 2: return new Tab3Fragment(); default: throw new RuntimeException("Invalid tab position"); } } @Override public int getCount() { return tabTitles.length; } // ...}
i added tab text and icon for each tab after calling tabs.setupWithViewPager(viewPager)
viewPager.setAdapter(new MyViewAdapter(getSupportFragmentManager())); TabLayout tabs=(TabLayout) findViewById(R.id.tabs); tabs.setupWithViewPager(viewPager); tabs.getTabAt(0).setIcon(R.drawable.icon1); tabs.getTabAt(1).setIcon(R.drawable.icon2); tabs.getTabAt(0).setText(getResources().getText(R.string.tab1)); tabs.getTabAt(1).setText(getResources().getText(R.string.tab2));
I'm using Kotlin and have spent an hour to find the bugs with this code.
var viewPager: ViewPager = view.findViewById(R.id.viewPager)...adapter = TabAdapter(fragmentManager!!)adapter.addFragment(Fragment1(), "Fragment 1")adapter.addFragment(Fragment2(), "Fragment 2")viewPager.adapter = adaptertabLayout.setupWithViewPager(viewpager)
I can compile this with no error, but the tab title is not showing until I realize the viewpager I assigned to the tabLayout is not viewPager (notice the capitalize 'P'). It's not producing error because kotlin will find any matching layout id, in this case "viewpager" which is a ViewPager but on another view.