我尝试使用广播菜单项动态填充RCP应用程序中的菜单。目的是这些菜单项对应于不同的"模式"为申请。
我通过动态贡献创建菜单:
@AboutToShow
public void aboutToShow(
final List<MMenuElement> items,
final EModelService modelService) {
// Code to get list of modes
for (Mode m : modeList) {
final MDirectMenuItem menuItem;
menuItem = modelService.createModelElement(MDirectMenuItem.class);
menuItem.setType(ItemType.RADIO);
menuItem.setLabel(m.getName());
/* Set the "handler" instance */
menuItem.setObject(new ModeMenuHandler(m));
items.add(menuItem);
}
当我单击各个菜单项时,正确调用相应的处理程序。但是,菜单项不会表现为 Radio 项目。
如何将动态创建的广播菜单项作为单个广播项目组 的一部分?
答案 0 :(得分:1)
这里的问题是每次显示菜单时都会销毁旧的菜单项,并再次调用@AboutToShow
方法来重新创建菜单。所以任何旧的无线电选择都会丢失。
因此,您需要在每次更改时保存当前选择,并在再次创建菜单时在相应的菜单项上调用setSelected(true)
。
或者,如果菜单中的项目数量没有变化(您的modeList
是固定大小),您可以使用处理器创建菜单一次(processor
元素{ {1}}扩展点)。