我有一个带有RadioButton选项和标签投票的投票小部件
我使用了ValueChangeHandler:
valueRadioButton.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> e) {
if(e.getValue() == true)
{
System.out.println("select");
votesPlusDelta(votesLabel, +1);
}
else
{
System.out.println("deselect");
votesPlusDelta(votesLabel, -1);
}
}
});
private void votesPlusDelta(Label votesLabel, int delta)
{
int votes = Integer.parseInt(votesLabel.getText());
votes = votes + delta;
votesLabel.setText(votes+"");
}
当用户选择新选项时,较旧的选择侦听器应跳转到else语句,但不会(仅+1部分工作)。我该怎么办?
答案 0 :(得分:9)
它在RadioButton javadoc中说明清除单选按钮时不会收到ValueChangeEvent。不幸的是,这意味着您必须自己完成所有簿记。
作为在GWT问题跟踪器上建议创建自己的RadioButtonGroup类的替代方法,您可以考虑这样做:
private int lastChoice = -1;
private Map<Integer, Integer> votes = new HashMap<Integer, Integer>();
// Make sure to initialize the map with whatever you need
然后初始化单选按钮时:
List<RadioButton> allRadioButtons = new ArrayList<RadioButton>();
// Add all radio buttons to list here
for (RadioButton radioButton : allRadioButtons) {
radioButton.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> e) {
updateVotes(allRadioButtons.indexOf(radioButton));
});
}
updateVotes方法看起来像这样:
private void updateVotes(int choice) {
if (votes.containsKey(lastChoice)) {
votes.put(lastChoice, votes.get(lastChoice) - 1);
}
votes.put(choice, votes.get(choice) + 1);
lastChoice = choice;
// Update labels using the votes map here
}
不是很优雅,但应该可以胜任。
答案 1 :(得分:2)
在GWT issue tracker处,此特定问题存在缺陷。最后一条评论有一个建议,基本上你似乎需要在所有单选按钮上都有变换处理程序并自己跟踪分组......
干杯,