2016-06-03 11 views
0

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?

+0

Können Sie nicht „nur“ haben Ihre 'SuggestOracle' nur Antworten zurück, wenn die Abfrage lang genug? –

Antwort

0

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 genannt MySuggestOracle) - 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 nur HasText implementieren)
  • SuggestionDisplay - verwenden Sie die mit showSuggestions ü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; 
     } 
    } 
} 
+0

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

0

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

danke für den Tipp, aber ich habe ein Problem: https://gyazo.com/0e168c8f98ee61ce7b859d6002a1abc5 – AndreiXwe

+1

Würde 'super.showSuggestionList()' dieses Problem lösen? Wenn Sie mehr als 1 Zeichen haben, lassen Sie die Standardimplementierung einfach funktionieren. – Adam

+0

es zeigt immer noch Vorschläge, wenn ich nur ein Zeichen eingeben – AndreiXwe