【问题标题】:Codename one - checkbox option in overflow menu代号一 - 溢出菜单中的复选框选项
【发布时间】:2019-01-15 00:09:49
【问题描述】:

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

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

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

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

感谢和问候

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

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);

【问题讨论】:

    标签: checkbox menu overflow codenameone


    【解决方案1】:

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

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

    如果您想“全力以赴”,您只需在右侧工具栏中添加一个按钮,并使用该按钮显示完全自定义的溢出菜单。这在某些方面可能更容易。

    【讨论】:

    • 我尝试了以下代码,可以预期它可以工作:Command cmd = getToolbar().addCommandToOverflowMenu("My Command", FontImage.createMaterial(FontImage.MATERIAL_RADIO_BUTTON_UNCHECKED, new Button().getUnselectedStyle()), (ev) -> { cmd.setIcon(FontImage.createMaterial(FontImage.MATERIAL_RADIO_BUTTON_CHECKED, new Button().getUnselectedStyle())); }); 但是,我收到编译器错误,读取“局部变量 cmd 可能尚未初始化”。但我不能以任何其他方式初始化它,因为它必须是最终的。这能解决吗?
    • 你需要在类级别而不是方法级别定义cmd
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多