2012-09-26 7 views
5

In Android è possibile utilizzare/implementare un listener che attiva una richiamata quando il numero di bambini per una determinata vista cambia dinamicamente? Supponiamo ad esempio che una View abbia 3 bambini immediati, e uno sia rimosso tramite il codice, ho bisogno di un evento da attivare per dire che il numero di bambini immediati è cambiato.Android - Listener/Callback per quando il numero di View cambia i bambini

Per chiarire, non è necessario eseguire un attraversamento di profondità sull'albero Visualizza per contare i bambini, sono solo interessato a contare il numero di bambini al primo livello di una determinata vista.

Molte grazie

risposta

17

credo che si desidera utilizzare il OnHierarchyChangeListener: definizione dell'interfaccia

per un callback da richiamare quando la gerarchia all'interno di questo punto di vista è cambiato. La gerarchia cambia ogni volta che un bambino viene aggiunto o rimosso da questa vista.

Ha due callback:

+0

È fantastico e proprio quello che stavo cercando! Molte grazie – ComethTheNerd

+0

Contento di aver potuto aiutare. – Sam

+0

sì è quello che è stato effettivamente chiesto +1. Non sapevo di questo già disponibile. Così ho scritto qualcosa per conto mio se avessi affrontato tale esigenza. :) – Javanator

1

sua semplice per ingannare il basso.

  1. Basta estendere il Gruppo Vedi il tuo aggiungendo Vista della e sovrascrivere rimuovere e opzionalmente il metodo addView.

  2. Fornire l'implementazione dell'interfaccia di richiamata a uno qualsiasi del metodo di classe ViewGroup per impostare listener. Chiamare il proprio delegato all'interno della rimozione sostituita e il metodo addView . Rendi delegato il tuo callback interface per ricevere la dimensione corrente.

Qualcosa di simile

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

Questo è un suggerimento veramente pulito che credo sarà perfetto per il monitoraggio dello stato più avanzato. In questo caso, tuttavia, utilizzo il listener di gerarchia suggerito come sembra una soluzione pronta. Grazie per il tuo aiuto anche se – ComethTheNerd

Problemi correlati