TabLayout tabs text not displaying TabLayout tabs text not displaying android android

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.