¿Puedes poner fragmentos dentro del fragmento para una pestaña en la barra de acciones?Fragmentos en fragmentos de la pestaña Barra de acciones?
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 a la muestra en http://developer.android.com/guide/topics/ui/actionbar.html#Tabs.
El TabListener se parece a esto:
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, que sólo contienen una sola TextView en ellos, algo como esto (la mayoría de los atributos eliminadas para mayor claridad):
<LinearLayout>
<TextView android:text="Tab 1" />
</LinearLayout>
Pero el fragmento de una de mis pestañas es más complicado, y contiene dos fragmentos incrustados, un poco como esta:
<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, todos los métodos del ciclo de vida de arranque (onStart(), onResume()) son llamados para los tres fragmentos (el fragmento de la pestaña, más los dos fragmentos incrustados).
Pero cuando el usuario selecciona otra pestaña, solo el fragmento de la pestaña obtiene cualquiera 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 se-seleccionado de nuevo la pestaña, ya que el tiempo de ejecución se queja de un identificador 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 para eliminar estos fragmentos incrustados cuando el fragmento pestaña ¿es removido? Si es así, ¿cuándo, exactamente, hago eso?
Podría publicar su código TabListener que realiza el interruptor pestaña? También están las líneas duplicadas 'android: id =" @ + id/frag2 "' por encima de intencionadas o solo un error de transcripción en la pregunta publicada aquí? – adamp
@adamp, sí, el ID duplicado era un error de transcripción ... Edité la pregunta para corregir eso. También agregué mi código TabListener a la pregunta. –