Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse rcp RCP中的动态收音机菜单项_Eclipse Rcp_E4 - Fatal编程技术网

Eclipse rcp RCP中的动态收音机菜单项

Eclipse rcp RCP中的动态收音机菜单项,eclipse-rcp,e4,Eclipse Rcp,E4,我试图在RCP应用程序中动态填充一个菜单,其中包含无线电菜单项。目的是这些菜单项对应于应用程序的不同模式 我通过动态贡献创建菜单: @AboutToShow public void aboutToShow( final List<MMenuElement> items, final EModelService modelService) { // Code to get list of modes for (Mode m : mod

我试图在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);
    }
当我单击各个菜单项时,正确地调用了相应的处理程序。但是,菜单项的行为与收音机项不同


如何使动态创建的单选菜单项成为单个单选菜单项组的一部分?

这里的问题是,每次显示菜单时,旧菜单项都会被销毁,并再次调用@AboutToShow方法来重新创建菜单。因此,任何旧的无线电选择都将丢失

因此,您需要在每次更改当前选择时保存它,并在再次创建菜单时调用相应菜单项上的setSelectedtrue

或者,如果菜单中的项目数没有改变,您的模型师是固定大小的,您可以使用org.eclipse.e4.workbench.model扩展点的processor元素创建一次菜单。

谢谢!在@AboutToShow中做一个setSelectedtrue就成功了。