2015-09-07 119 views
1

我在一個Fragment中編寫佈局,在init TabLayout和ViewPager和tablayout.setupWithViewPager(viewpager)之後,出現了奇怪的問題...... TabLayout中的文本缺失。 但是當我在一個活動中定義它們時是可以的。 谷歌bug之一?Android TabLayout在片段中,缺少文字

// init with titles and fragments 
    adapter = new OrderFragmentAdapter(fragmentManager, titleList, fragments); 
    viewPager.setAdapter(adapter); 
    tabLayout.setTabTextColors(R.color.black_alpha_50, R.color.red_ec5740); 
    tabLayout.setBackgroundColor(getResources().getColor(android.R.color.transparent)); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    tabLayout.setTabMode(TabLayout.MODE_FIXED); 
    tabLayout.setupWithViewPager(viewPager); 
+0

你可以把OrderFragmentAdapter的代碼? –

回答

2

這就是我在我的片段中初始化TabLayout並且工作正常。並確保您使用的是最新版本的設計支持庫。

String[] categoryNames = getResources().getStringArray(R.array.categories_home); 
    TabPagerAdapter tabPagerAdapter = new TabPagerAdapter(getChildFragmentManager()); 
    for (int i = 0; i < categoryNames.length; i++) { 
     tabPagerAdapter.addFragment(new HomeTabFragment(), categoryNames[i]); 
    }   
    viewPager.setAdapter(tabPagerAdapter); 
    tabLayout.setupWithViewPager(viewPager); 

代碼TabPagerAdapter

public class TabPagerAdapter extends FragmentPagerAdapter { 
private final List<Fragment> mFragments = new ArrayList<>(); 
private final List<String> mFragmentTitles = new ArrayList<>(); 

public TabPagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

public void addFragment(Fragment fragment, String title) { 
    mFragments.add(fragment); 
    mFragmentTitles.add(title); 
} 

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

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

@Override 
public CharSequence getPageTitle(int position) { 
    return mFragmentTitles.get(position); 
} 
} 
+0

感謝您分享代碼..但在我看來tabLayout仍然不起作用,最後我使用TabPageIndicator而不是tabLayout。 – Akashi

2

您好我也碰到這個問題,並找出解決辦法,

Android的API將自動預置所有分頁標題從您的尋呼機適配器,當你調用tablayout .setupWithViewPager(),所以你只需要在你的pager中做這個操作就可以了!:

String[] title={...}; 
    ... 
    @Override 
    public CharSequence getPageTitle(int position) { 
     // return your title there 
     return getResources().getString(title[position]); 
    }