2012-09-25 3 views
5

Ich arbeite an der Implementierung einer ListBox, die den Benutzer warnen soll, wenn sie eine Auswahl in der ListBox treffen. Gibt es eine Möglichkeit, dem Benutzer zu antworten, der auf ein Element in der Listbox klickt, und auf die Auswahl zu reagieren, bevor ein "changeEvent" auftritt, damit ich verhindern kann, dass das changeEvent ausgelöst wird. Ich habe versucht,GWT - ListBox, Vorschau preview changeEvent

Event.addNativePreviewHandler(new NativePreviewHandler() { 
    @Override 
    public void onPreviewNativeEvent(NativePreviewEvent event) { 
     System.out.println("EVENT: " + event.getTypeInt()); 
    } 
}); 

verwenden, aber dies antwortet nie auf ein bestimmtes Element in der List-Box zu klicken, reagiert er zunächst nur auf der List-Box zu klicken, wenn Sie die List-Box konzentrieren. Ich möchte in der Lage sein, etwas zu tun wie:

Event.addNativePreviewHandler(new NativePreviewHandler() { 
    @Override 
    public void onPreviewNativeEvent(NativePreviewEvent event) { 
     if(event is changeEvent && event source is listBox) { 
      if(do some check here) 
      event.stopPropagation(); 
     } 
    } 
}); 

Alle Vorschläge würden sehr geschätzt werden, danke!

+0

@AndreiVolgin danke für Ihre Antwort. Ich möchte in der Lage sein, ihnen zu erlauben, auf die Optionen zu klicken und sie dann mit einem Popup aufzufordern, zuzustimmen, um fortzufahren und dann das changeEvent weiter auszuführen oder das changeEvent basierend auf ihrer Antwort auf das Popup abzubrechen. –

Antwort

4

Vielen Dank allen für Ihre Eingabe. Am Ende habe ich den Status der Auswahl gespeichert, wenn das Listenfeld fokussiert wird. Und diesen Index speichern und ihn beim Auftreten des changeEvent ändern, ändern Sie ihn nur dann in die nächste Auswahl, wenn dies zulässig ist.

Dies geschieht mit einem Uibinder, kann aber auch einfach durch Hinzufügen dieser Ereignisse direkt zur ListBox erfolgen. Danke nochmal für die Kommentare!

1

Es ist nicht schädlich, dass ChangeEvent fortgesetzt wird. Sie können Ihre Logik dem ChangeEvent-Handler hinzufügen. Wenn ein Benutzer sich entscheidet, nicht fortzufahren, setzen Sie die Auswahl einfach auf die vorherige zurück oder entfernen Sie die Auswahl.

@Override 
onChange(ChangeEvent event) { 
    // ask user if he wants to continue 
    // if yes 
     doSomething(); 
    // if no 
     myList.setSelectedIndex(-1); 
} 
3

Sie können einfach das Ereignis töten, wenn Sie es nicht behandeln wollen:

@Override 
onChange(ChangeEvent event) { 
    // ask user if he wants to continue 
    // if yes 
     doSomething(); 
    // if no 
     event.kill(); 
} 
+0

Wenn Sie das Ereignis beenden, wird die Auswahl zurückgesetzt? –

+0

@AndreiVolgin Fügen Sie eine Variable hinzu, die den Wert der Auswahl bei jeder Änderung behält, und wenn Sie nicht fortfahren möchten, beenden Sie das Ereignis und setzen die Auswahl auf den letzten Wert in der Variablen –

+0

@ AdelBoutros zurück Ich habe den Wert in einem Fokusereignis gespeichert und ihn im Änderungsereignis zurück geschaltet. Ich habe das Event Kill nicht benutzt, aber ich werde es mir anschauen, danke für die Vorschläge! –

Verwandte Themen