IInputSelectionProvider 未被 RCP SelectionService 的侦听器考虑

IInputSelectionProvider not considered by listeners of RCP SelectionService

我有一个具有不同视图的 RCP 应用程序。这些视图应该通过 Eclipse SelectionService 相互交互。 在视图 1 中,我添加了一个带有

的 SelectionListener
getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this.listener);

在视图 2 中,我添加了一个带有

的 SelectionProvider
getSite().setSelectionProvider(this);

为了使其正常工作,我在视图 2 中实现了 IInputSelectionProvider 中的方法。当我 运行 我的程序时,未调用视图 1 的选择侦听器。调试后, 我发现视图 1 未添加到视图 2 的侦听器列表中。在视图 2 中,我有一个方法

private ListenerList listenersList = new ListenerList();

@Override
public void addSelectionChangedListener(ISelectionChangedListener iselectionchangedlistener) {
  // TODO Auto-generated method stub
  listenersList.add(iselectionchangedlistener);
}

向 IInputSelectionProvider 添加侦听器。我的问题是:谁应该调用这个方法。我的理解是 Eclipse SelectionService 应该使用

getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this.listener);

但是没用。我必须自己填写listenerList吗?如果是,为什么我必须使用 SelectionService? 或者我是否必须通过调用任何其他方法而不使用列表来遍历侦听器列表?因为如果我检查 ISelectionService 对象

ISelectionService service = getSite().getWorkbenchWindow().getSelectionService();

我看到了所有的听众。 但是他们不是上面listenerList的一部分。

每次激活视图时都会调用 addSelectionChangedListener,当视图不再处于活动状态时将其移除。这意味着:如果视图 A 处于活动状态并且调用了 'setSeletion',则会通知所有正在侦听的视图。如果这些视图本身调用 'setSelection' 什么也不会发生。没有启动通知。