代号一 - 溢出菜单中的复选框选项

Codename one - checkbox option in overflow menu

我有一个带有基本溢出菜单的表单,它应该提供操作该表单项目列表的选项。一部分是通过各种方式对列表进行排序(效果很好),另一部分是提供列表的过滤。例如。有一个简单的可以检查的项目购物清单,我希望过滤器仅显示 "open" 项,但未选中以关注。

我可以将以前组装的组件添加到溢出菜单吗?它只是在那个位置产生的一个对话框,所以它应该能够容纳任何组件。但是,选项 "add(Material)CommandToOverflowMenu" 只允许直接添加命令或字符串、图标、侦听器组合。

如果无法自定义组件,我仍然可以使用图标先显示一个空的复选框,然后在按下后更新为选中的复选框图标。但是,如何在添加现有溢出项后对其进行操作?我什至没有看到删除以前添加的溢出项的方法,因为 "getOverflowCommands" returns 是一个 Iterable,它不应该用于操作列表。

有没有办法做到这一点,我是否必须设置自己的自定义溢出菜单,如对话框?

谢谢并致以最诚挚的问候

用解决方案编辑 我创建了一个新的 class 来解决我的问题:

public class ToggleCommand extends Command {

    private boolean selected;

    private static Image selectedImage = FontImage.createMaterial(FontImage.MATERIAL_RADIO_BUTTON_CHECKED,
            new Label().getUnselectedStyle());
    private static Image unSelectedImage = FontImage.createMaterial(FontImage.MATERIAL_RADIO_BUTTON_UNCHECKED,
            new Label().getUnselectedStyle());

    public ToggleCommand(String command) {
        this(command, selectedImage);
    }

    public ToggleCommand(String command, Image icon) {
        super(command, icon);
        selected = true;
    }

    public boolean isSelected() {
        return selected;
    }

    public void setSelected(boolean selected) {
        this.selected = selected;
        if (selected) {
            this.setIcon(selectedImage);
        } else {
            this.setIcon(unSelectedImage);
        }
    }
}

你可以这样使用:

filterDoneCommand = new ToggleCommand("Show closed?") {
        @Override
        public void actionPerformed(ActionEvent evt) {
            filterDoneCommand.setSelected(!filterDoneCommand.isSelected());
            // do your other stuff
        }
    };
    getToolbar().addCommandToOverflowMenu(filterDoneCommand);

溢出菜单构建不佳,可能应该重写。我们没有对那里的复选框选项的内置支持,并且进行更改以添加它会非常麻烦。

我能想到的最佳解决方法是添加一个带有复选框的命令作为图标。然后 checking/unchecking 调用命令时。 addMaterialCommandToOverflowMenu 和类似的命令方法 return 一个 Command 实例,在这种情况下您需要保存以供将来参考。

如果您想去 "all out",您只需在右侧工具栏上添加一个按钮,然后使用它来显示完全自定义的溢出菜单。这在某些方面可能更容易。