首页 > 解决方案 > 属性值更改时更新 CodenameOne sidemenu 命令

问题描述

我希望能够根据动态更新的 ListProperty 的大小来更改侧边菜单命令的标题。我试图通过 changeListener 来做到这一点,但我无法让它工作。

Command cmdWishlist = tb.addMaterialCommandToRightSideMenu("Wishlist(" + Shop.getInstance().wishList.size() + ")", FontImage.MATERIAL_FAVORITE, e -> {
        ....
    });
    Shop.getInstance().wishList.addChangeListener(pl -> {
        tb.revalidate();
    });

但是,如果我打开另一个表单并检查侧面菜单,我需要的更改正在反映。我怎样才能让它工作?顺便说一句,如果我在工具栏和setText("Wishlist(" + Shop.getInstance().wishList.size() + ")更改侦听器中放置标签,我会得到所需的行为。

请指出我正确的方向

标签: codenameone

解决方案


当我们将命令添加到侧边菜单或按钮时,我们会提取其值但不会自动反映更新,因为这可能会通过将命令绑定到组件而导致潜在的内存泄漏。解决方法是也修改原始的底层组件,例如:

Button ui = tb.findCommandComponent(cmd);
ui.setText(newLabelForCommand);

推荐阅读