2012-09-26 5 views
5

In Android kann man einen Listener verwenden/implementieren, der einen Callback auslöst, wenn sich die Anzahl der Kinder für eine bestimmte View dynamisch ändert? Wenn zum Beispiel eine Ansicht drei direkte Kinder hat und eine durch Code entfernt wird, muss ein Ereignis ausgelöst werden, um zu sagen, dass sich die Anzahl der unmittelbaren Kinder geändert hat.Android - Listener/Callback für die Änderung der Anzahl der View-Kinder

Um zu verdeutlichen, brauche ich keine Tiefen-Traversal auf der View-Struktur, um Kinder zu zählen, ich bin nur daran interessiert, die Anzahl der Kinder in der ersten Schicht einer bestimmten Ansicht zu zählen.

Vielen Dank

Antwort

17

Ich glaube, dass Sie die OnHierarchyChangeListener verwenden möchten:

Schnittstellendefinition für einen Rückruf aufgerufen werden, wenn die Hierarchie innerhalb dieser Ansicht geändert. Die Hierarchie ändert sich, wenn ein Kind dieser Ansicht hinzugefügt oder daraus entfernt wird.

Es hat zwei Rückrufe:

+0

Das ist großartig und genau das, was ich gesucht habe! Vielen Dank – ComethTheNerd

+0

Ich bin froh, dass ich helfen konnte. – Sam

+0

yep es ist derjenige, der tatsächlich +1 fragte. Ich wusste von diesem bereits verfügbaren nicht. Also schrieb ich etwas für mich, wenn ich einer solchen Anforderung gegenüberstand. :) – Javanator

1

Es ist einfach zu betrügen.

  1. verlängern einfach die View Group Ihre Zugabe in Sicht und außer Kraft setzen Entfernen und optional die addView Verfahren.

  2. Geben Sie Ihre Callback-Schnittstellenimplementierung an Ihre beliebige Klassenmethode ViewGroup an, um den Listener zu setzen. Rufen Sie den Delegaten innerhalb der überschrieben entfernen und addView-Methode. Machen Sie Ihren Callback-Interface-Delegaten, um die aktuelle Größe zu erhalten.

So etwas wie dieses

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

Dies ist ein wirklich netter Vorschlag, dass ich denke, wird für fortgeschrittenen Zustand Tracking perfekt sein. In diesem Fall verwende ich jedoch den vorgeschlagenen Hierarchie-Listener, da dies eine fertige Lösung zu sein scheint. Danke für Ihre Hilfe aber – ComethTheNerd

Verwandte Themen