Android: remove () Fragmento -> add () nuevo Fragmento de la misma clase otra vez -> onCreateView y onActivityCreated no llamado?

Estoy destruyendo un fragmento creado mediante programación con:

getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.test)).commit(); 

Que se determina en el archivo xml como este:

 <LinearLayout android:id="@+id/test" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> </LinearLayout> 

Si luego creo un fragmento de la misma clase nuevamente en la actividad main:

 getSupportFragmentManager().beginTransaction() .add(R.id.result_bar, testinstance) .commit(); 

Entonces onCreate parece no llamado de nuevo (el fragmento es sólo vacío). ¿Qué estoy haciendo mal aquí? Gracias.

One Solution collect form web for “Android: remove () Fragmento -> add () nuevo Fragmento de la misma clase otra vez -> onCreateView y onActivityCreated no llamado?”

Explicación: ¿Por qué FrameLayout para Fragment

Qué es FrameLayout :

Según Google Documentation on Commons Layouts y esta respuesta de ¿Cuáles son las diferencias entre LinearLayout, RelativeLayout y AbsoluteLayout? , ViewGroup s como LinearLayout , RelativeLayout , AbsoluteLayout (decrepated) , TableLayout , etc. permiten mostrar las vistas:

  1. LinearLayout: "muestra las vistas una por una"
  2. RelativeLayout: "muestra vistas relativas a otra vista"
  3. TableLayout: "muestra vistas en una tabla"
    Etc.

FrameLayout muestra las vistas por superposición de la otra. Generalmente se utiliza para contener diseños:

"Los diseños de tramas son uno de los tipos más simples y eficientes de diseños utilizados por los desarrolladores de Android para organizar los controles de vista, que se utilizan con menos frecuencia que otros diseños, simplemente porque se utilizan generalmente para mostrar solo una vista o vistas que se superponen. La disposición del marco se utiliza a menudo como disposición del envase, pues generalmente tiene solamente una sola opinión del niño (a menudo otra disposición, usada para organizar más de una visión). "

Fuente: FrameLayout MobilTuts

"El diseño de trama permite a los desarrolladores mostrar sólo un solo o varios elementos de interfaz de usuario dentro de Layout de marco, pero cada elemento se posicionará en función de la parte superior izquierda de la pantalla y los elementos que se superponen se mostrarán solapados".

Fuente: Disposición del marco de Android para el principiante absoluto

OK, pero ¿por qué necesito esto para Fragment ? (Vs LinearLayout o <fragmento>)

La documentación de Google de FrameLayout dice:

"FrameLayout está diseñado para bloquear un área en la pantalla para mostrar un único elemento."

FrameLayout recibirá un diseño y está dispuesto a ello. Mientras que el resto de ViewGroup s sólo muestra vistas. Usted puede hacer un Fragment en todos los ViewGroup s (he probado que, fue una sorpresa para mí), pero no es una forma adecuada de hacer esto. Los FrameLayout son:

"… el diseño normal de la opción cuando desea superponer vistas."

Si crea un diseño con un <fragment .../> , su fragmento no se reemplazará por otro, porque se muestra, se "adjunta" con su id en la vista. Para reemplazar un fragmento, necesita alojarlo: "Al encapsular el Fragmento dentro de un FrameLayout, puede reemplazar sólo los detalles" (vea esta respuesta ).

A continuación, tenga en cuenta que FrameLayout s son FrameLayout y pueden alojar un diseño . Fragment s ( Fragmento de la documentación de Google , que explica muy sencillamente los hechos de cómo utilizar un fragmento), cuando se declaran en xml, deben tener una clase adjunta (un id), que no se puede reemplazar.
¡Por eso necesitamos un contenedor para alojar este fragmento y superponer la vista de la actividad!

Esperamos que esto sea útil.

Nota: Si alguien quiere editar esta respuesta, porque algo que no es explicar o mal explicar, él / ella podría con entusiasmo.

  • No se puede ejecutar dex: varios archivos dex definen Lcom / google / android / gms / analytics / internal / Command
  • Diferencia entre el conmutador empaquetado y el interruptor escaso dalvik opcode
  • GetDrawingCache () devuelto Bitmap no actualizado
  • Cambiar fuente en AlertDialog
  • Método toJson que hace que la interfaz de usuario se congele
  • Bordes dentados en imágenes presentadas en Android
  • Portar el código de gráficos AWT a Android
  • Cómo configurar el tiempo de espera de HttpResponse para Android en Java
  • Convertir una cadena en una clase de actividad
  • Pasar una referencia en Java
  • ¿Inicializar Google Mobile Ads SDK (Admob) sólo una vez?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.