本来想偷懒,利用choice的选择功能,实现按按钮后打开隐藏的choice的列表,实现选择功能,发现choice在visible=“false”的情况下,打开的鹅列表是无法显示选中项的,而且以后没选择一项,下次打开列表选中的项就会消失,重复操作列表最终会被清空。证实在原版的Kuix类库中出现上述问题,非本人修改出来的bug。
<choice id="cmbFilter" visible="false">
<choiceRadiogroup id="lstFilter" value="PublicDocFlow" οnchange="test2(#lstFilter.value)">
<radiobutton value="1">a</radiobutton>
<radiobutton value="2">b</radiobutton>
<radiobutton value="3">c</radiobutton>
</choice>
<screenFirstMenu onAction="test">pop up</screenFirstMenu>
测试代码
public boolean onMessage(Object identifier, Object[] arguments) {
if("test".equals(identifier)){
Choice obj = (Choice)screen.getWidget("cmbFilter");
obj.processActionEvent();
}
return false;
}
如果visible="true"则完全没有上述问题。
//***************************************************
问题解决,choice有一个choiceContainer的子panel,作用不是很明确,似乎是用来存放选中的radiobutton的,当choice不可见时,不会触发其dolayout方法,而dolayout中会把choiceContainer中的选中项“放回”选择窗口中,所以导致弹出窗口看不到选中项,多次选中后全部radiobutton都放入了choiceContainer,却没有办法从choiceContainer拿回。这算是choice的一个bug。
实际上对于choiceContainer的作用我还弄不清楚,虽然提供了getChoiceContainer(),但是其它单元中并没有见到调用这个方法的,它似乎是用来临时存放选中项的,但是又看不出它有什么确切的作用,或许去掉它是更好的选择。