Я динамически добавил раскрывающийся список к раскрывающейся кнопке на панели инструментов Eclipse, следуя инструкциям: Программное добавление параметров к раскрывающейся кнопке в eclipse
Теперь мне нужно обновить выпадающий список. Моя идея состоит в том, чтобы удалить старый список, а затем добавить новый список в раскрывающуюся кнопку. Я пробовал методы: removeContributionFactory (фабрика AbstractContributionFactory) и dispose() IMenuService, но ни один из них не работает. Может ли кто-нибудь дать мне несколько советов о том, как достичь цели?
Вот код, который я использовал:
(1) в классе A я вызываю метод, чтобы добавить раскрывающийся список к раскрывающейся кнопке (команда)
Class A {
public static ContextSwitchContributionFactory contextFactory =
new ContextSwitchContributionFactory("menu:"+"SwitchContext", null);
public static IMenuService menuService =
(IMenuService)PlatformUI.getWorkbench().getService(IMenuService.class);
...
method A () {
...
ContextSwitchContributionFactory.updateContextMenu(menuService, contextFactory, "SwitchContext");
...
}
(2) определение ContextSwitchContributionFactory:
public class ContextSwitchContributionFactory extends
AbstractContributionFactory {
private ContextData contextData = new ContextData();
private ContextsCollector contextList;
}
static public void updateContextMenu (IMenuService service, final AbstractContributionFactory factory, final String menuId) {
service.dispose();
service.addContributionFactory(factory);
}
public ContextSwitchContributionFactory(String location, String namespace) {
super(location, namespace);
// this is to read the file and update the data for creating the drop down list
contextData.readContextsFile();
contextList = contextData.getContextsCollector();
}
@Override
public void createContributionItems(IServiceLocator serviceLocator,
IContributionRoot additions) {
Set<IContext> cxtset = contextList.getContextList();
Iterator<IContext> iterator = cxtset.iterator();
while (iterator.hasNext()) {
IContext context = iterator.next();
CommandContributionItemParameter menuitem = new CommandContributionItemParameter(
serviceLocator, null,
"coms.sample.command.context",
CommandContributionItem.STYLE_PUSH);
menuitem.label = context.getName();
menuitem.visibleEnabled = true;
if (context.isSelected()) {
ImageDescriptor image = MechanicPlugin.getImageDescriptor("icons/ticking_icon.png");
menuitem.icon = image;
}
additions.addContributionItem(new CommandContributionItem(menuitem), null);
}
}
}
(3) в методе C класса C я хочу обновить раскрывающийся список:
class C {
...
method C {
...
// A.menuService.dispose(); (doesn't work)
// remove the old one
A.menuService.removeContributionFactory(A.contextFactory);
// create a new one
A.contextFactory =
new ContextSwitchContributionFactory("menu:"+"SwitchContext", null);
// after executing this statement, the old drop down list is still there, and the new one is added after the old list.
A.menuService.addContributionFactory(A.contextFactory);
ContextSwitchContributionFactory.updateContextMenu(menuService, contextFactory, "SwitchContext");
..