wake-up-neo.com

Tabs von TabLayout werden nicht angezeigt

Ich habe eine Hauptaktivität, die ein Fragment hostet, das wiederum ein TabLayout (mit einem ViewPager) hostet. Die Tab-Leiste wird angezeigt, die Tabs selbst werden nicht angezeigt.

Hier ist mein Code in der Hauptaktivität zum Anzeigen des Host-Fragments:

        Fragment fragment = new BMITabsFragment();

        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).addToBackStack(Constants.BMI_TABS_FRAGMENT).commit();

Hier ist mein Fragment, das das TabLayout hostet, das BMITabsFragment (s.a.) ist:

public class BMITabsFragment extends Fragment {
...
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }

}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    // Get the ViewPager and set it's PagerAdapter so that it can display items
    ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewpager);
    viewPager.setAdapter(new BMIFragmentPagerAdapter(getActivity().getSupportFragmentManager(),
            getActivity()));

    // Give the TabLayout the ViewPager
    TabLayout tabLayout = (TabLayout) view.findViewById(R.id.sliding_tabs);
    tabLayout.setupWithViewPager(viewPager);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_bmitabs, container, false);
    return view;
}
...
}

Dies ist mein FragmentPagerAdapter:

public class BMIFragmentPagerAdapter extends FragmentPagerAdapter {

final int PAGE_COUNT = 2;
private FragmentManager fragmentManager;
private Context context;

public BMIFragmentPagerAdapter(FragmentManager fm, Context context) {
    super(fm);
    this.context = context;
    this.fragmentManager = fm;

}

public BMIFragmentPagerAdapter(FragmentManager fm) {
    super(fm);
    fragmentManager = fm;

}

@Override
public CharSequence getPageTitle(int position) {
    String[] pageTitles = context.getResources().getStringArray(R.array.page_titles_array);
    return pageTitles[position];
}

@Override
public Fragment getItem(int position) {
    SharedPreferences prefs = context.getSharedPreferences(Constants.SHARED_PREFS_FILE, 0);
    long patientId = prefs.getLong(Constants.SELECTED_PATIENT_ID, 1);
    Fragment fragment = null;
    switch (position){
        case 0:
            return BMITabelleFragment.newInstance(patientId);

        case 1:
            return BMIChartFragment.newInstance(patientId);

        default:
            return BMITabelleFragment.newInstance(patientId);
    }
}

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

Und das ist die fragment_bmitabs.xml:

<?xml version="1.0" encoding="utf-8"?>

<Android.support.design.widget.TabLayout
    Android:id="@+id/sliding_tabs"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    app:tabMode="scrollable" />

<Android.support.v4.view.ViewPager
    Android:id="@+id/viewpager"
    Android:layout_width="match_parent"
    Android:layout_height="0px"
    Android:layout_weight="1"
    Android:background="@Android:color/white" />

</LinearLayout>

Mein Code basiert auf dem Google Android Guide unter https://github.com/codepath/Android_guides/wiki/Google-Play-Style-Tabs- using-TabLayout

Was fehlt mir hier?

Hinweis: Ich verwende AppCompatActivity und die Unterstützungsbibliotheken v4 & v7 und die com: Android: Unterstützung: Designbibliothek

11
mrd

Ich habe das gleiche Problem!... Aber dieses Problem auch für mich.

tabLayout.post(new Runnable() {
    @Override
    public void run() {
        tabLayout.setupWithViewPager(viewPager);
    }
});

https://code.google.com/p/Android/issues/detail?id=180462

Registersymbole nach setupWithViewPager() setzen

private void setTabs {
   tabLayout.setupWithViewPager(viewPager);
   setupTabIcons();
} 

private void setupTabIcons() {
   tabLayout.getTabAt(0).setIcon(tabIcons[0]);
   tabLayout.getTabAt(1).setIcon(tabIcons[1]);
   tabLayout.getTabAt(2).setIcon(tabIcons[2]);
}
7
Vikram

wie @Nathaniel Ford sagte , dies sollte ein Fehler sein, ich ändere die Designbibliothek 23.0.1.google hat es behoben, also ändere build.gradle in compile 'com.Android.support:design:23.0.1'. ps: Sie müssen auch Ihre compileSdkVersion auf 23 ändern 

6
chinaanihchen

Wenn Sie Android:tabPadding-Attribut in Tablayout der XML-Datei verwenden, entfernen Sie es.

1

Sie können FragmentStatePagerAdapter anstelle von FragmentPagerAdapter verwenden. Es kann dir helfen.

0

Keine der anderen Antworten funktionierte für mich, ich habe alle versucht 

Dies tat jedoch Folgendes: TabLayout zeigt nach dem Hinzufügen der Navigationsleiste keine Registerkarten an

Entsprechend dieser Antwort müssen Sie Ihre TabLayout in eine AppBarLayout einschließen. Warum? Wer weiß. Aber zumindest funktioniert es. 

Beispielcode (aus diesem Beitrag entnommen):

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginTop="200dp"
    Android:id="@+id/appBarLayout2">


    <Android.support.design.widget.TabLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:id="@+id/tabLayout2"
        app:tabMode="fixed"
        app:tabGravity="fill"

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

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

<Android.support.v4.view.ViewPager
    Android:layout_width="match_parent"
    Android:layout_height="300dp"
    Android:layout_alignParentStart="true"
    Android:layout_alignParentBottom="true"
    Android:id="@+id/viewPager2"
    Android:layout_below="@+id/appBarLayout2">

</Android.support.v4.view.ViewPager>
0
Roymunson