2012-09-26 27 views
5

En Android, ¿se puede usar/implementar un oyente que activa una devolución de llamada cuando el número de hijos de una Vista determinada cambia dinámicamente? Digamos, por ejemplo, que una Vista tiene 3 hijos inmediatos, y uno se elimina a través del código, necesito un evento para disparar para decir que la cantidad de hijos inmediatos ha cambiado.Android - Escucha/Devolución de llamada cuando el número de hijos View cambia

Para aclarar, yo no necesito para realizar un recorrido en profundidad en el árbol Ver para contar los niños, sólo estoy interesado en contar el número de niños en la primera capa de una vista determinada.

Muchas gracias

Respuesta

17

creo que desea utilizar el OnHierarchyChangeListener: definición de interfaz

para una devolución de llamada que se invoca cuando la jerarquía dentro de este punto de vista ha cambiado. La jerarquía cambia cada vez que se agrega o elimina un elemento secundario de esta vista.

Tiene dos devoluciones de llamada:

+0

¡Eso es genial y justo lo que estaba buscando! Muchas gracias – ComethTheNerd

+0

Me alegro de poder ayudar. – Sam

+0

sí, es el que realmente pidió +1. No sabía de esto ya disponible. Así que escribí algo para mí si me enfrentaba a tal requisito. :) – Javanator

1

Es fácil de engañar.

  1. Sólo se extienden del Grupo Ver Su Vista de la adición de quitar y anular y opcionalmente el método addView.

  2. Proporcione su implementación de interfaz de devolución de llamada a cualquiera de su método de clase ViewGroup para establecer el oyente. Llame a su delegado desde el eliminación anulada y método addView. Haga que su delegado interfaz de devolución de llamada para recibir el tamaño actual.

Algo como esto

public class MyViewGroup extends LinearLayout { 

    // provide constructor implmentation to justify super constructor requirement 

    private OnSizeChangeListener callback; 

    public void setOnSizeChangeListener(OnSizeChangeListener callback) { 
    this.callback = callback; 
    } 

    @Override 
    public void remove(View view) { 
    super.remove(view); 
    if(callback != null) { 
     callback.sizeChanged(getChildCount); 
    } 
    } 
} 
+0

Esta es una sugerencia muy ordenado que creo que va a ser perfecto para el seguimiento del estado más avanzado. En este caso, sin embargo, utilizaré el oyente de jerarquía sugerido, ya que parece una solución preparada. Gracias por su ayuda, aunque – ComethTheNerd

Cuestiones relacionadas