Cuándo usar FragmentManager :: putFragment y getFragment

Tengo una aplicación que usa fragmentos y estaba jugando con cómo usar el mismo fragmento en una Actividad con un panel doble y una Actividad como independiente. Todavía no estoy seguro del mejor método para completar esto, pero noté que FragmentManager tiene una función putFragment y getFragment. Lo que me confunde es que debe proporcionar un paquete como parámetro para las funciones de obtener y poner. ¿Cómo pueden las Actividades separadas tener el mismo Paquete? Obviamente, puedes pasar el paquete como parámetro, pero en ese momento siento que estás haciendo un desastre.

Entonces, ¿cuál es un buen escenario para usar getFragment y putFragment? Por favor, incluye la explicación del parámetro Bundle.

La respuesta básica:

Estos solo son útiles cuando se implementa onSaveInstanceState () y se restaura ese estado en onCreate (). Si no está implementando onSaveInstanceState (), puede olvidarse de estos métodos y pretender que no existen.

El problema que están resolviendo: si quiere guardar una referencia a un fragmento en su “estado de instancia guardado”, no puede simplemente poner una referencia de objeto allí. Primero porque no puedes poner un objeto simple en un paquete. 🙂 Y la razón de esto es que el objective de ese estado guardado es que se copie fuera de su proceso, por lo que si su proceso necesita ser eliminado, luego puede ser copiado de nuevo en un nuevo proceso para que pueda volver -Inicializar su actividad / fragmento de. Un objeto sin formato solo tiene sentido en el contexto del proceso en el que se está ejecutando, por lo que no es posible copiar correctamente la referencia a dicho objeto fuera de su proceso actual y en otro.

Entonces, lo que putFragment () / getFragment () hace es colocar un dato en el Bundle dado que puede identificar ese fragmento a través de una nueva instancia de su actividad / fragmento en otro proceso. Exactamente lo que es esta representación, no está definida, pero en la implementación actual es el identificador de entero interno para ese fragmento, que se usará más adelante cuando FragmentManager necesite volver a crear ese fragmento desde un estado previamente guardado … es recreado con el mismo identificador, de modo que cuando llame a getFragment () puede recuperar el entero, y usarlo para determinar el objeto Fragment correcto para devolver al llamante que corresponde al que se guardó previamente.

En resumen, es solo la forma en que puede recuperar la referencia del fragmento después de restaurar la actividad. Por ejemplo, cuando crea un fragmento y lo utiliza en toda su actividad, de modo que después de la configuración cambie, su actividad se vuelva a crear, usted quiere recuperar esa referencia. Asi que

 public void onSaveInstanceState(Bundle outState){ getFragmentManager().putFragment(outState,"myfragment",myfragment); } public void onRetoreInstanceState(Bundle inState){ myFragment = getFragmentManager().getFragment(inState,"myfragment"); } 

Tienes una buena explicación de lo que put|getFragment se puede utilizar en este hilo de grupo de Android .

Aunque todo el hilo es interesante, la respuesta real a su pregunta fue dada por Dianne Hackborn “.

También puede aprovechar las API de FragmentManager para guardar un fragmento de “puntero” en un paquete y luego recuperarlo, para permitirle mantener punteros directos en el estado de guardar / restaurar.