FragmentTabHost: las pestañas no son direccionables hasta que se vean por primera vez
Estoy usando un FragmentTabHost con varias pestañas (construido como se muestra aquí ). Sin embargo, no puedo dirigir aleatoriamente mis lengüetas con getFragmentByTag (que vuelve en ese caso null) a menos que la lengüeta dirigida se haya activado haciendo clic en la lengüeta por lo menos una vez.
El FragmentTabHost parece retrasar la creación de las pestañas hasta que realmente las necesitamos (aka el usuario hizo clic en él y quiere verlo).
¿Hay alguna manera de forzar a la Anfitriona a crearlos de forma inmediata de tal manera que pueda acceder a ellos de forma segura por getFragmentByTag?
¿O es posible crear las pestañas "por mi cuenta" y simplemente agregarlas a TabHost?
- Cómo establecer la pestaña seleccionada debe estar en el centro
- Android: Cómo llamar a la función de la actividad dentro de la pestaña desde el tabhost
- Android: TabActivity obsoleto, el uso de fragmentos?
- TabHost / TabWidget - Escala de la imagen de fondo?
- ViewPager dentro de Fragmento pierde contenido al volver a él
- Android TabHost - Actividades dentro de cada pestaña
- Cómo crear pestañas en la aplicación de Android y agregar pestañas de forma dinámica (dependiendo de los usuarios coincidentes)
- android: usando ActivityGroup para integrar actividades
- ¿Cómo implementar pestañas desplazables horizontalmente?
- Deshabilitar las teclas DPAD en android
- La actividad en el host de tabulación se queda en blanco
- Cómo implementar el menú de pestaña de Android sin tabhost obsoleto
- Pestañas personalizadas en android
¿Hay alguna manera de forzar al anfitrión a crearlos de inmediato de modo que pueda acceder a ellos de forma segura por getFragmentByTag?
No. porque la transacción se ejecuta en onAttachedToWindow()
. echemos un vistazo al código fuente :
@Override protected void onAttachedToWindow() { super.onAttachedToWindow(); String currentTab = getCurrentTabTag(); // Go through all tabs and make sure their fragments match. // the correct state. FragmentTransaction ft = null; for (int i=0; i<mTabs.size(); i++) { TabInfo tab = mTabs.get(i); tab.fragment = mFragmentManager.findFragmentByTag(tab.tag); if (tab.fragment != null && !tab.fragment.isDetached()) { if (tab.tag.equals(currentTab)) { // The fragment for this tab is already there and // active, and it is what we really want to have // as the current tab. Nothing to do. mLastTab = tab; } else { // This fragment was restored in the active state, // but is not the current tab. Deactivate it. if (ft == null) { ft = mFragmentManager.beginTransaction(); } ft.detach(tab.fragment); } } } // We are now ready to go. Make sure we are switched to the // correct tab. mAttached = true; ft = doTabChanged(currentTab, ft); if (ft != null) { ft.commit(); mFragmentManager.executePendingTransactions(); } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); mAttached = false; }
Como ves el mFragmentManager.executePendingTransactions();
se ejecuta en onAttachedToWindow
.
¿O es posible crear las pestañas "por mi cuenta" y simplemente agregarlas a TabHost?
sí, puede utilizar tabhost y puede crear contenido de tab con los métodos siguientes.
public TabHost.TabSpec setContent (int viewId)
public TabHost.TabSpec setContent (intención de intención)
public TabHost.TabSpec setContent (TabHost.TabContentFactory contentFactory)
- Negación de permisos de Android 6.0: requiere permiso android.permission.WRITE_SETTINGS
- Congelar o crear una vista Web estable al seleccionar la barra de acción Volver? Impedir Cargar / recargar cada vez