【问题标题】:IInputSelectionProvider not considered by listeners of RCP SelectionServiceRCP SelectionService 的侦听器未考虑 IInputSelectionProvider
【发布时间】:2015-05-07 15:29:46
【问题描述】:

我有一个具有不同视图的 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 的一部分。

【问题讨论】:

  • 你在打电话给ISelectionProvider.setSelection吗?
  • 是的,我愿意。我使用这个实现:@Override public void setSelection(final ISelection iselection) { Object listeners[] = listenersList.getListeners(); for (int i = 0; i

标签: eclipse-rcp


【解决方案1】:

每次视图被激活时都会调用 addSelectionChangedListener,当视图不再处于活动状态时会被移除。这意味着:如果视图 A 处于活动状态并且调用了“setSeletion”,则通知所有正在侦听的视图。如果这些视图本身调用“setSelection”,则不会发生任何事情。未启动任何通知。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多