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?

¿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)

  • Comportamiento de menú de opciones extraño en Android TabActivity
  • ¿Cómo centrar el texto en tabhost?
  • FragmentTabHost & Fragments - ¿Cómo puedo pasar datos entre pestañas?
  • Cómo cambiar las pestañas programatically en android de fragmento?
  • Java.lang.IllegalStateException: Sin actividad
  • InputMethodManager contiene referencia al tabhost - Memory Leak - OOM Error
  • Inflar un diseño con ImageButton en Fragmento mediante programación
  • Pila trasera personalizada para cada fragmento en TabHost en Android
  • Cambio de vista dentro de TabHost (una actividad, varias vistas)
  • Actualizar una actividad dentro de tabhost
  • Reemplazar un fragmento a otro fragmento en el TabHost
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.