2017-04-12 14 views
1

全く別のコードで変更されたObservableListを観察したい。私の問題は、リストが変更されたときにListChangeListenerを呼び出すだけでなく、リストに既に要素が含まれている可能性があるリスナーをアタッチするときだけでなく、初期状態をリスナーに渡す必要があるということです。ListChangeListenerの初期状態を与える

もちろん、私は、次の操作を行うことができます:

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

しかし、このアプローチを持つ2回のメソッド呼び出しの間に追加された任意の項目は理想的ではありませんこれは、二回処理されます。

順序が逆になった場合:

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

第2のアプローチは、完全に2回のメソッド呼び出しの間に追加された要素を無視することになります。

このような状況を処理するにはどうすればよいでしょうか?

+1

あなたのリスナーが起動前要素を初めて処理するときに気付くべきことは、 – efekctive

+0

@efekctive Okです。だから最初は解決策でしたが、しかし、あなたのソリューションは、リストがある時点で変更された場合にのみ機能しますが、これは保証されていません。リストは永遠に初期の状態にとどまることができます。 –

+0

変更されていない場合、リスナーは呼び出されません。疑問点 – efekctive

答えて

1

気にする必要があるのは、リスナーが起動前の要素を処理するために初めて呼び出されたときを知ることです。

リスナーが呼び出されない場合がありますので、変更する必要があるのは、リストの初期状態を確認する方法と方法です。変更リスナーは実装であるため、リスナーコンストラクタにリストを渡して、その時点で初期状態を処理します。リスナーが呼び出されない場合、あなたはカバーされます。

関連する問題