quitar - manual de programacion android pdf
Método para anular cuando el diseño se destruye en Android (3)
Es peligroso confiar en la "destrucción" de un diseño para ejecutar sentencias, ya que no estás directamente en control de eso cuando eso sucede. La forma aceptada y la buena práctica es usar el ciclo de vida de la actividad para eso.
Pero si realmente desea vincular su componente a ese ciclo de vida , le sugiero que su componente implemente una interfaz (algo así como Removable
), y haga algo así en su clase básica de actividad (que extiendan todas sus actividades):
protected Set<Removable> myRemovableItems = new HashSet<Removable>();
@Override
public void onPause() {
super.onPause();
for (Removable removable : myRemovableItems) {
removable.remove();
}
}
La interfaz:
public interface Removable {
void remove();
}
Luego, cada vez que agrega uno de sus componentes personalizados de una actividad, agrega el componente al conjunto interno de Removable
de la actividad, y su método de remove
se invocará automáticamente cada vez que se pause la actividad.
Eso le permitiría especificar qué hacer cuando se llama a onPause
dentro del componente en sí. Pero no aseguraría que se llame automáticamente , para eso tendrás que hacerlo en la actividad.
Nota: puede usar onStop
lugar de onPause
dependiendo de cuándo desea que se onPause
la eliminación.
Tengo un componente personalizado que extiende LinearLayout, necesito ejecutar ciertas declaraciones cuando se destruye o elimina Layout. (o a punto de ser eliminado)
Una forma es verificar onPause () o onDestroy () de una actividad y llamar a los métodos del componente personalizado. Pero quiero eliminar esa sobrecarga de la actividad. De modo que el componente personalizado en sí mismo puede manejar cuando se desacopla el diseño. Pero no encuentro el método adecuado para anular (para detectar el evento) cuando se elimina el diseño. ¿Hay alguna manera de manejar esto, o tenemos que usar el método de actividad onPause () y onResume ()?
Puede hacer que su vista personalizada escuche sus propios eventos. Sugiero usar View.OnAttachStateChangeListener y escuchar el evento onDetach.
@Override
void onViewDetachedFromWindow(View v) {
doCleanup();
}
Tuve éxito anulando los onAttachedToWindow()
y onDetachedFromWindow()
:
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
// View is now attached
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
// View is now detached, and about to be destroyed
}