2017-04-12 83 views
1

我想觀察一個由完全獨立的代碼修改的ObservableList。我的問題是,我不只希望ListChangeListener在列表更改時調用(當我附加偵聽器時列表可能已經包含元素),但我也希望將初始狀態傳遞給偵聽器。給ListChangeListener初始狀態

很顯然,我可以做到以下幾點:

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

但是,這種方法是在兩個方法調用之間添加任何物品會被重複處理,這是不理想的。

當順序被顛倒:

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

第二種方法將完全忽略這兩個方法調用之間添加任何元素。

處理這種情況的最佳方法是什麼?

+1

看來你應該關心的是知道你的監聽器第一次被調用來處理任何預調用元素 – efekctive

+0

@efekctive好的,所以最初我雖然這是解決方案。但是你的解決方案只適用於列表在某些時候改變了,這是不能保證的。該名單可能永遠保持在其初始狀態。 –

+0

如果沒有改變,監聽器將永遠不會被調用。一個爭議點 – efekctive

回答

1

看來你應該關心的是知道你的監聽器第一次被調用來處理任何預調用元素。

在你的情況下,因爲監聽器可能永遠不會被調用你需要改變的是你何時以及如何驗證列表的初始狀態。由於更改偵聽器是您的實現,因此我會將該列表傳遞給偵聽器構造函數,並在該點處理初始狀態。如果偵聽器從未被調用,則會被覆蓋。