2017-04-12 5 views
1

Ich möchte eine ObservableList beobachten, die durch völlig separaten Code geändert wird. Mein Problem ist, dass ich nicht nur möchte, dass mein ListChangeListener aufgerufen wird, wenn sich die Liste ändert (wenn ich meinen Listener anhefte, kann die Liste bereits Elemente enthalten), aber ich möchte auch, dass der Anfangszustand an den Listener übergeben wird. OffensichtlichGive ListChangeListener Anfangszustand

konnte ich folgendes tun:

list.addListener(this::listenerMethod); 
listenerMethod(fakeChange); 

Aber mit diesem Ansatz jedes Element, das zwischen den beiden Methodenaufrufe hinzugefügt wird, würde zweimal behandelt werden, was nicht ideal ist.

Wenn die Reihenfolge umgekehrt:

listenerMethod(fakeChange); 
list.addListener(this::listenerMethod); 

Der zweite Ansatz alle Elemente ignorieren würde völlig zwischen den beiden Methodenaufrufe hinzugefügt.

Was wäre der beste Weg, um mit einer solchen Situation umzugehen?

+1

Es scheint, dass, was Sie beachten sollten, zu wissen, wenn Ihr Listener zum ersten Mal aufgerufen wird, um alle Elemente vor der Invokation – efekctive

+0

@efekctive Ok zu verarbeiten, so zunächst ich das war die Lösung. Aber Ihre Lösung funktioniert nur, wenn die Liste irgendwann geändert wird, was nicht garantiert ist. Die Liste könnte für immer in ihrem ursprünglichen Zustand bleiben. –

+0

Wenn es nicht geändert wird, wird der Listener niemals aufgerufen. Ein strittiger Punkt – efekctive

Antwort

1

Es scheint, dass Sie wissen müssen, wann Ihr Listener zum ersten Mal aufgerufen wird, um Elemente vor dem Aufruf zu verarbeiten.

In Ihrem Fall, da der Listener möglicherweise nie aufgerufen wird, müssen Sie ändern, wann und wie Sie den Anfangszustand der Liste überprüfen. Da der Änderungslistener Ihre Implementierung ist, würde ich die Liste an den Listenerkonstruktor übergeben und den Anfangszustand an diesem Punkt verarbeiten. Wenn der Listener nie aufgerufen wird, sind Sie abgedeckt.

Verwandte Themen