2016-06-27 12 views
33

Ich verwende TabLayout innerhalb einer Fragment, um drei feste Registerkarten anzuzeigen und die Registerkarten funktionieren, aber es zeigt nicht den Tab-Text, auch nachdem ich das app:tabTextColor Attribut im Layout, das es immer noch nicht sichtbar ist.TabLayout Tabs Text nicht angezeigt

NewFragment.java

public class NewFragment extends Fragment { 

private RecyclerView mRecyclerView; 
private RecyclerView.LayoutManager mLayoutManager; 
private RecyclerView.Adapter mAdapter; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View inflatedView = inflater.inflate(R.layout.new_fragment, container, false); 

    TabLayout tabLayout = (TabLayout) inflatedView.findViewById(R.id.tabLayout); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 1")); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 2")); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 3")); 
    final ViewPager viewPager = (ViewPager) inflatedView.findViewById(R.id.viewpager); 

    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); 
    mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 

    viewPager.setAdapter(new PagerAdapter(getFragmentManager(), tabLayout.getTabCount())); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    tabLayout.setupWithViewPager(viewPager); 
    tabLayout.setTabMode(TabLayout.MODE_FIXED); 
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 

     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 

    return inflatedView; 
} 

public class PagerAdapter extends FragmentStatePagerAdapter { 
    int mNumOfTabs; 

    public PagerAdapter(FragmentManager fm, int NumOfTabs) { 
     super(fm); 
     this.mNumOfTabs = NumOfTabs; 
    } 

    @Override 
    public Fragment getItem(int position) { 

     switch (position) { 
      case 0: 
       return new FragmentTab(); 
      case 1: 
       return new FragmentTab(); 
      case 2: 
       return new FragmentTab(); 
      default: 
       return null; 
     } 
    } 

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

newfragment.xml

<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
tools:context=".NewFragment"> 

<android.support.design.widget.TabLayout 
    android:id="@+id/tabLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:tabMode="fixed" 
    app:tabTextColor="#ffffff" 
    app:tabGravity="fill" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:color/white"/> 

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

Antwort

66

Das Problem ist, dass Sie setupWithViewPager() nach dem Einrichten Ihre Tabs mit den addTab() Anrufe anrufen, sie effektiv zu überschreiben.

Vom documentation von TabLayout bezüglich setupWithViewPager():

Die in diesem Layout angezeigt Registerkarten aus dem ViewPager Adapters Seitentitel bestückt werden.

Wenn Sie Ihren TabLayout mit einem ViewPager verwenden möchten, sollten Sie getPageTitle() in Ihrem PagerAdapter (und entfernen Sie die addTab() Anrufe, sie redundant sind) außer Kraft setzen.

Zum Beispiel:

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: 
       return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return tabTitles.length; 
    } 

    // ... 
} 
+1

Lebensretter Aufruf ... danke :) – Faytraneozter

+0

Vielen Dank für die man sich Zeit nimmt und dieses Posting Antworten. Es half :) – Mona

+1

Vielen Dank @ earthw0rmjim .... Sie haben meinen Tag gerettet :) :) – MashukKhan

2

i Registerkarte Text und Symbol für jeden Reiter hinzugefügt, nachdem 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)); 
+0

Funktioniert es Wenn der 'tabs.setupWithViewPager (viewPager);' nach dem Setzen der Registerkarten – Avinash

+0

aufgerufen wird, wird es funktionieren –

Verwandte Themen