tutorial studio programacion para intuitivas guia desarrollador con biblia aplicaciones android android-fragments android-actionbar

android - studio - Fragmentos en la barra de acción ¿Fragmentos de la pestaña?



manual de java para android (2)

¿Puedes colocar fragmentos dentro del fragmento para una pestaña en la barra de acción?

Tengo una aplicación Android (3.0 / Honeycomb) con una actividad principal que tiene una barra de acción con 3 pestañas. Las pestañas se agregan en el método onCreate () de mi actividad y los fragmentos de pestañas se agregan / eliminan con un TabListener. El código es casi idéntico al ejemplo en http://developer.android.com/guide/topics/ui/actionbar.html#Tabs .

El TabListener se ve así:

public class SwapOutTabListener implements ActionBar.TabListener { public SwapOutTabListener(Fragment fragment) { _fragment = fragment; } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { ft.add(R.id.fragment_container, _fragment, null); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { ft.remove(_fragment); } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { // do nothing } private Fragment _fragment; }

Dos de mis pestañas son fragmentos simples, solo contienen una única TextView en ellas, algo como esto (la mayoría de los atributos eliminados para mayor claridad):

<LinearLayout> <TextView android:text="Tab 1" /> </LinearLayout>

Pero el fragmento para una de mis pestañas es más complicado y contiene dos fragmentos incrustados, algo así:

<LinearLayout> <fragment android:name="...Fragment_1" android:id="@+id/frag1" /> <fragment android:name="...Fragment_2" android:id="@+id/frag2" /> </LinearLayout>

Cuando el usuario selecciona la pestaña para este fragmento, se llama a todos los métodos de inicio del ciclo de vida (onStart (), onResume ()) para los tres fragmentos (el fragmento de pestaña, más los dos fragmentos incrustados).

Pero cuando el usuario selecciona otra pestaña, solo el fragmento de la pestaña obtiene alguno de los métodos de fin de ciclo de vida (onPause (), onStop (), etc.). Los dos fragmentos incrustados nunca reciben ninguna de estas llamadas y nunca se cierran.

Esto causa problemas cuando la pestaña se vuelve a seleccionar, ya que el tiempo de ejecución se queja de un ID de fragmento duplicado al cargar el fragmento de pestaña:

Binary XML file line #7: Duplicate id 0x7f05000a, tag null, or parent id 0x7f050009 with another fragment for ...Fragment_1

¿Es mi responsabilidad eliminar estos fragmentos incrustados cuando se elimina el fragmento de la pestaña? Si es así, ¿cuándo, exactamente, hago eso?



No, los fragmentos no están actualmente en una jerarquía. Miré a hacer esto, pero en este punto, todos los casos de uso para él han sido impulsados ​​principalmente por un uso excesivo de fragmentos donde cada elemento de la interfaz de usuario se implementa como un fragmento. No es así como están destinados a ser utilizados, están destinados a encapsular las principales piezas de nivel superior de una aplicación. Si tiene una jerarquía de cosas, para eso son su diseño y sus vistas.