Las pestañas de TabLayout no se muestran
Tengo una actividad principal, que aloja un fragmento, que a su vez recibe un TabLayout (con un ViewPager). La barra de pestañas se muestra, ya que las pestañas no se muestran.
Aquí está mi código en la actividad principal para mostrar el fragmento de host:
- ¿Cómo obtiene el número de página actual de un ViewPager para Android?
- ViewPager con el niño extensible
- Android ViewPager w / varias clases de fragmentos cada w / archivo de diseño independiente
- Eliminar un ViewPager mediante programación, ¿cuándo son (o cómo puedo asegurarlo) que se han destruido fragmentos?
- Android.support.v4.app.FragmentManager y android.app.FragmentManager en ViewPager
Fragment fragment = new BMITabsFragment(); FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).addToBackStack(Constants.BMI_TABS_FRAGMENT).commit();
Aquí está mi Fragmento que alberga el TabLayout, que es BMITabsFragment (sa):
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; } ... }
Este es mi 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; } }
Y este es el fragmento_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>
Mi código se basa en la Guía para Android de Google en https://github.com/codepath/android_guides/wiki/Google-Play-Style-Tabs-using-TabLayout
Lo que me falta aquí?
Nota: Estoy usando AppCompatActivity y las bibliotecas de soporte v4 y v7 y la biblioteca com: android: support: design
- Cuando se utiliza ViewPager con Fragmentos, los fragmentos se destruyen al deslizar
- Utilizar el mismo fragmento en ViewPager pero el fragmento tendrá un diseño diferente cada vez
- "La vista de contenido aún no se ha creado" en Android Fragments
- Detección de eventos de toque / toque en un viewpager
- Fragmento crear / restaurar una vista duplicada cuando vuelva a conectar
- Cómo usar Android ViewPager
- El menú deslizante bloquea el evento táctil en la vista superior
- Recarga de WebView cuando Fragmento en ViewPager se retiene desde BackStack
¡Tengo el mismo problema! Pero esto también me arregla.
tabLayout.post(new Runnable() { @Override public void run() { tabLayout.setupWithViewPager(viewPager); } });
Como @ Nataniel Ford, dijo, esto debería un error, cambio de usar la biblioteca de diseño 23.0.1.google lo arregló, por lo que cambiar build.gradle
para compile 'com.android.support:design:23.0.1'
. Ps: también debes cambiar tu compileSdkVersion
a 23
Establecer iconos de pestaña después de setupWithViewPager()
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]); }
Si está usando android:tabPadding
atributo en Tablayout de archivo xml, quítelo.
- Cómo evitar que los elementos se dupliquen cuando se desplaza la vista de reciclador
- Conexión de http de Android con OkHttp No funciona