2012-10-31 19 views
6

ich eine Umfrage Widget mit RadioButton- Auswahl und Label-Stimmen habenGWT RadioButton- ändern Handler

  1. Wenn Benutzer eine Auswahl auswählt, Wahl Stimmen sollten +1;
  2. Wenn eine andere Auswahl ausgewählt wurde, sollten alte Wahlstimmen -1 und neue Wahlstimmen +1 wählen.

I verwendet ValueChangeHandler dafür:

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+""); 
} 

Wenn Benutzer neue Wahl wählt, sollten ältere Wahl Zuhörer in else-Anweisung springen, aber es wird nicht (nur 1 Teil Arbeit). Was soll ich machen?

Antwort

9

Es heißt in der RadioButton javadoc, dass Sie ein nicht erhalten ValueChangeEvent, wenn ein Optionsfeld gelöscht wird. Dies bedeutet leider, dass Sie die gesamte Buchhaltung selbst durchführen müssen.

Als alterativ Ihre eigene Radiobutton Klasse zu erstellen, wie auf der GWT issue tracker vorgeschlagen, könnten Sie tun so etwas wie dies berücksichtigen:

private int lastChoice = -1; 
private Map<Integer, Integer> votes = new HashMap<Integer, Integer>(); 
// Make sure to initialize the map with whatever you need 

Dann, wenn Sie die Radiobuttons initialisieren:

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

Die updateVotes-Methode sieht dann in etwa so aus:

Nicht sehr elegant, aber es sollte den Job machen.

+0

Danke, ich denke, es funktioniert! ;) – united

2

Es gibt einen offenen Defekt bei diesem spezifischen Problem gegenüber GWT issue tracker. Der letzte Kommentar hat einen Vorschlag, im Grunde scheint es Sie changehandlers auf allen Radiobuttons haben müssen, und halten Sie den Überblick über die Gruppierungen selbst ...

Cheers,

+1

Problem wurde nach GitHub verschoben: https://github.com/gwtproject/gwt/issues/3467 –

Verwandte Themen