Ich versuche eine SuggestBox zu erstellen, die nur Vorschläge enthält, nachdem 2 Zeichen eingegeben wurden. Meine Idee war es, die Vorschläge zu verstecken, wenn die Textlänge 1 ist, mit der Klasse DefaultSuggestionDisplay. Ich habe versucht, verschiedene Handler wie KeyPressHandler und KeyUpHandler auf der SuggestionBox selbst und seiner TextBox anzuhängen, aber keiner von ihnen schien zu funktionieren. Hast du irgendwelche "Vorschläge"? : DWie werden Vorschläge in einer GWT SuggestBox nur angezeigt, nachdem 2 Zeichen eingegeben wurden?
Antwort
Sie können DefaultSuggestionDisplay
erweitern und außer Kraft setzen showSuggestions
Methode:
public class MySuggestionDisplay extends DefaultSuggestionDisplay {
@Override
protected void showSuggestions(SuggestBox suggestBox, Collection<? extends Suggestion> suggestions, boolean isDisplayStringHTML, boolean isAutoSelectEnabled, SuggestionCallback callback) {
if(suggestBox.getText().length() > 1)
super.showSuggestions(suggestBox, suggestions, isDisplayStringHTML, isAutoSelectEnabled, callback);
}
}
Sie haben Ihre neue Anzeige auf den SuggestBox
Konstruktor übergeben:
public class MySuggestBox extends SuggestBox {
public MySuggestBox() {
super(
new MySuggestOracle(),
new TextBox(),
new MySuggestionDisplay());
}
}
In dieser Konstruktor, den Sie bereitstellen sollten:
- Ihre eigene
SuggestOracle
Klasse (hier genanntMySuggestOracle
) - ich nehme an, Sie haben eine TextBox
- es ist der Standard-Widget ist Text eingeben (Sie Ihre eigenen zur Verfügung stellen können, es muss nurHasText
implementieren)SuggestionDisplay
- verwenden Sie die mitshowSuggestions
überschriebene Methode.
Dies ist voll Beispielcode Arbeitsvorschläge auf mindestens 2 Zeichen eingegeben zeigt:
import java.util.ArrayList;
import java.util.Collection;
import com.google.gwt.user.client.ui.SuggestBox;
import com.google.gwt.user.client.ui.SuggestOracle;
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
import com.google.gwt.user.client.ui.TextBox;
public class MySuggestBox extends SuggestBox {
public MySuggestBox() {
super(
new SuggestOracle() {
@Override
public void requestSuggestions(Request request, Callback callback) {
ArrayList<Suggestion> suggestions = new ArrayList<Suggestion>();
suggestions.add(new MySuggestion("aaa"));
suggestions.add(new MySuggestion("bbb"));
suggestions.add(new MySuggestion("ccc"));
suggestions.add(new MySuggestion("ddd"));
Response response = new Response();
response.setSuggestions(suggestions);
callback.onSuggestionsReady(request, response);
}
},
new TextBox(),
new MySuggestionDisplay());
}
public static class MySuggestionDisplay extends DefaultSuggestionDisplay {
@Override
protected void showSuggestions(SuggestBox suggestBox, Collection<? extends Suggestion> suggestions, boolean isDisplayStringHTML, boolean isAutoSelectEnabled, SuggestionCallback callback) {
if(suggestBox.getText().length() > 1)
super.showSuggestions(suggestBox, suggestions, isDisplayStringHTML, isAutoSelectEnabled, callback);
}
}
public static class MySuggestion implements Suggestion {
private String text;
public MySuggestion(String text) {
this.text = text;
}
@Override
public String getDisplayString() {
return text;
}
@Override
public String getReplacementString() {
return text;
}
}
}
Ich habe eine andere Variante verwendet, aber jetzt funktioniert es. Wenn Sie 2 Zeichen eingeben und dann das letzte löschen, werden die Vorschläge immer noch für 2 Zeichen angezeigt, also habe ich ein anderes hinzugefügt super.hideSugestions(); zum if in MySuggestionDisplay. Danke vielmals! – AndreiXwe
Sie können die Methode SuggestBox erweitern und die Methode showSuggestionList()
überschreiben.
Hinzufügen von KeyUpHandler funktioniert nicht, da Sie einen anderen KeyUpHandler hinzufügen und nicht den ersetzen, den SuggestBox seiner eigenen TextBox hinzugefügt hat.
EDIT:
@Override
showSuggestionList() {
if (getTextBox().getValue().length() > 1) {
super.showSuggestionList();
}
}
danke für den Tipp, aber ich habe ein Problem: https://gyazo.com/0e168c8f98ee61ce7b859d6002a1abc5 – AndreiXwe
Würde 'super.showSuggestionList()' dieses Problem lösen? Wenn Sie mehr als 1 Zeichen haben, lassen Sie die Standardimplementierung einfach funktionieren. – Adam
es zeigt immer noch Vorschläge, wenn ich nur ein Zeichen eingeben – AndreiXwe
Können Sie nicht „nur“ haben Ihre 'SuggestOracle' nur Antworten zurück, wenn die Abfrage lang genug? –