support - fragments android ejemplo
¿Por qué usar Fragment#setRetainInstance(boolean)? (3)
¿Cómo usas esto como desarrollador?
Llamar setRetainInstance(true)
. Normalmente hago eso en onCreateView()
o onActivityCreated()
, donde lo uso.
y ¿por qué hace las cosas más fáciles?
Tiende a ser más simple que onRetainNonConfigurationInstance()
para manejar la retención de datos a través de cambios de configuración (por ejemplo, girar el dispositivo de vertical a horizontal). Los fragmentos no retenidos se destruyen y vuelven a crear en el cambio de configuración; los fragmentos retenidos no lo son. Por lo tanto, cualquier dato retenido por esos fragmentos retenidos está disponible para la actividad de cambio posterior a la configuración.
Encuentro el Fragmento # setRetainInstance (verdadero) confuso. Aquí está el Javadoc, extraído de la API para desarrolladores de Android :
public void setRetainInstance (boolean retener)
Controle si una instancia de fragmento se retiene a través de la recreación de actividad (como a partir de un cambio de configuración). Esto solo se puede usar con fragmentos que no estén en la pila posterior. Si se establece, el ciclo de vida del fragmento será ligeramente diferente cuando se recrea una actividad:
- onDestroy () no se llamará (pero onDetach () seguirá siendo así, porque el fragmento se está separando de su actividad actual).
- No se invocará onCreate (Bundle) ya que el fragmento no se vuelve a crear.
- onAttach (Actividad) y onActivityCreated (Bundle) seguirán siendo llamados.
Pregunta: ¿Cómo lo usa como desarrollador y por qué facilita las cosas?
Agregué esta respuesta muy tarde, pero pensé que aclararía las cosas. Repite después de mi. Cuando setRetainInstance es:
FALSO
- Fragment se vuelve a crear en el cambio de configuración. Se crea NUEVA INSTANCIA.
- Se solicitan TODOS los métodos del ciclo de vida en el cambio de configuración, incluidos onCreate () y onDestroy ().
CIERTO
- Fragmento no se vuelve a crear en el cambio de configuración. SE UTILIZA LA MISMA INSTANCIA.
- Todos los métodos de ciclo de vida son llamados al cambio de configuración, APART DESDE onCreate () y onDestroy ().
- Retener una instancia no funcionará cuando se agregue a la backstack.
No olvide que lo anterior se aplica tanto a DialogFragments como a Fragments.
Es muy útil para mantener abiertos los recursos de larga ejecución, como los sockets. Tenga un fragmento sin UI que contenga referencias a los conectores bluetooth y no tendrá que preocuparse por volver a conectarlos cuando el usuario encienda el teléfono.
También es útil para mantener referencias a recursos que tardan mucho tiempo en cargarse como mapas de bits o datos del servidor. Cargarlo una vez, mantenerlo en un fragmento retenido, y cuando la actividad se recarga, todavía está allí y no tiene que reconstruirlo.