RCP SelectionService的侦听器不考虑IInputSelectionProvider

时间:2015-04-29 06:21:41

标签: eclipse-rcp

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

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

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

的SelectionProvider
getSite().setSelectionProvider(this);

为了实现这一点,我在视图2中实现了IInputSelectionProvider中的方法。当我运行程序时,不会调用视图1s选择侦听器。调试后, 我发现在视图2的监听器列表中没有添加视图1.在视图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。

1 个答案:

答案 0 :(得分:0)

每次激活视图时都会调用addSelectionChangedListener,并在视图不再处于活动状态时将其删除。这意味着:如果View A处于活动状态并且调用了“setSeletion”,则会通知所有正在侦听的视图。如果这些视图本身调用'setSelection'没有任何反应。没有通知开始。