标签文本随viewpager消失

问题描述:

一个非常简单的例子。我认为大多数人以这种方式实施一个标签。但标签文本只是丢失。标签文本随viewpager消失

设计支持lib的版本是最新的24.2.0。

这里是我的布局代码:

<android.support.design.widget.TabLayout 
    android:id="@+id/tabs" 
    app:tabTextColor="@android:color/darker_gray" 
    app:tabSelectedTextColor="@android:color/white" 
    android:background="@color/colorPrimary" 
    android:minHeight="?attr/actionBarSize" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <android.support.design.widget.TabItem 
     android:text="@string/tab_domain" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <android.support.design.widget.TabItem 
     android:text="@string/tab_upload" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <android.support.design.widget.TabItem 
     android:text="@string/tab_download" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</android.support.design.widget.TabLayout> 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

我使用ButterKnife 8.2.1绑定视图对象。这里是的onCreate(我的活动代码):

final DiagnosePagerAdapter adapter = new DiagnosePagerAdapter(getSupportFragmentManager(), 
      tabs.getTabCount()); 
    tabs.setupWithViewPager(pager); 
    pager.setAdapter(adapter); 
    pager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabs)); 

,这里是我的适配器:

class DiagnosePagerAdapter extends FragmentStatePagerAdapter { 
    int mNumOfTabs; 
    List<Fragment> fragments = new ArrayList<>(); 

    public DiagnosePagerAdapter(FragmentManager fm, int numberOfTabs) { 
     super(fm); 
     this.mNumOfTabs = numberOfTabs; 
     fragments.add(new DomainFragment()); 
     fragments.add(new UploadFragment()); 
     fragments.add(new DownloadFragment()); 
    } 

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

    @Override 
    public int getCount() { 
     return mNumOfTabs; 
    } 
} 

我已经看到了类似的问题在这里:Using TabLayout inside a Fragment; tab text invisible

在回答这个问题说这已被固定在23.0.0,并且我的手机中没有任何解决方法可行,包括小米HM 2A和华为设备。

您必须如下覆盖getPageTitle()(我认为这将解决您的问题):

@Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "Domain"; 
      case 1: 
       return "Upload"; 
      case 2: 
       return "Download"; 
     } 
     return null; 
    } 

此外,如你有固定的标签的数量,你应该使用FragmentPagerAdapter而不是FragmentStatePagerAdapter。然后如下修改XML布局:

<android.support.design.widget.TabLayout 
    android:id="@+id/tabs" 
    app:tabTextColor="@android:color/darker_gray" 
    app:tabSelectedTextColor="@android:color/white" 
    android:background="@color/colorPrimary" 
    android:minHeight="?attr/actionBarSize" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

更改适配器如下:

class DiagnosePagerAdapter extends FragmentPagerAdapter { 

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

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment = null; 
     switch (position) { 
      case 0: 
       fragment = new DomainFragment(); 
       break; 
      case 1: 
       fragment = new UploadFragment(); 
       break; 
      case 2: 
       fragment = new DownloadFragment(); 
       break; 
     } 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "Domain"; 
      case 1: 
       return "Upload"; 
      case 2: 
       return "Download"; 
     } 
     return null; 
    } 

} 

并如下更改onCreate()

final DiagnosePagerAdapter adapter = new DiagnosePagerAdapter(getSupportFragmentManager()); 
pager.setAdapter(adapter);//call setAdapter() before setupWithViewPager() 
tabs.setupWithViewPager(pager); 
+0

这工作!非常感谢:) – Bleaker

+0

@Bleaker:很高兴知道它解决了你的问题。请点击回答旁边的绿色勾号接受答案。 –