2017-04-12 107 views
1

我想观察一个由完全独立的代码修改的ObservableList。我的问题是,我不只希望ListChangeListener在列表更改时调用(当我附加侦听器时列表可能已经包含元素),但我也希望将初始状态传递给侦听器。给ListChangeListener初始状态

很显然,我可以做到以下几点:

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

但是,这种方法是在两个方法调用之间添加任何物品会被重复处理,这是不理想的。

当顺序被颠倒:

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

第二种方法将完全忽略这两个方法调用之间添加任何元素。

处理这种情况的最佳方法是什么?

+1

看来你应该关心的是知道你的监听器第一次被调用来处理任何预调用元素 – efekctive

+0

@efekctive好的,所以最初我虽然这是解决方案。但是你的解决方案只适用于列表在某些时候改变了,这是不能保证的。该名单可能永远保持在其初始状态。 –

+0

如果没有改变,监听器将永远不会被调用。一个争议点 – efekctive

回答

1

看来你应该关心的是知道你的监听器第一次被调用来处理任何预调用元素。

在你的情况下,因为监听器可能永远不会被调用你需要改变的是你何时以及如何验证列表的初始状态。由于更改侦听器是您的实现,因此我会将该列表传递给侦听器构造函数,并在该点处理初始状态。如果侦听器从未被调用,则会被覆盖。