2010-12-11 5 views
3

J'ai un Oracle personnalisé avec des objets à transmettre à la SuggestBox. Ensuite, j'ai besoin de récupérer un objet quand il est sélectionné à partir de SuggestBox.SuggestBox override addSelectionHandler

public HandlerRegistration addSelectionHandler(SelectionHandler<SuggestOracle.Suggestion> handler) 

Le problème est que je n'ai pas Suggestion. J'ai "CustomSuggestion". Je lis de API et j'essaye d'écrire un SuggestBox personnalisé implémentant l'interface HasSelectionHandlers mais je ne peux pas parce que le SuggestBox a une implémentation de l'interface. J'ai l'erreur:

The interface HasSelectionHandlers cannot be implemented more than once with different arguments: HasSelectionHandlers<SuggestOracle.Suggestion> and HasSelectionHandlers<CustomSuggestion> 

Pouvez-vous m'aider? Désolé pour mon mauvais anglais.

Répondre

6

Je ne suis pas certain de comprendre votre problème. Jetez un oeil à l'exemple suivant (vraiment basique mais vous devriez avoir une idée sur la façon de traiter les suggestions personnalisées). Espérons que cela aide:

public void onModuleLoad() { 
    SuggestBox box = new SuggestBox(new CustomOracle<CustomSuggestion>()); 

    box.addSelectionHandler(new SelectionHandler<SuggestOracle.Suggestion>() { 

     @Override 
     public void onSelection(SelectionEvent<Suggestion> event) { 
      String value = ((CustomSuggestion) event.getSelectedItem()).fSomeOtherValue; 
      Window.alert(value); 
     } 
    }); 
    RootPanel.get().add(box); 
} 

private class CustomOracle<CustomSuggestion> extends SuggestOracle { 

    private LinkedList<Starter.CustomSuggestion> fStore; 

    public CustomOracle() { 
     fStore = new LinkedList<Starter.CustomSuggestion>(); 
     fStore.add(new Starter.CustomSuggestion("2", "two", "foo")); 
     fStore.add(new Starter.CustomSuggestion("22", "twenty-two", "bar")); 
     fStore.add(new Starter.CustomSuggestion("222", "two-hundred twenty-two", "w000t")); 
    } 

    @Override 
    public void requestSuggestions(Request request, Callback callback) { 
     String query = request.getQuery(); 
     LinkedList<Starter.CustomSuggestion> result = new LinkedList<Starter.CustomSuggestion>(); 
     for (Starter.CustomSuggestion entry : fStore) { 
      if (entry.fDisplay.contains(query)) { 
       result.add(entry); 
      } 
     } 
     callback.onSuggestionsReady(request, new Response(result)); 
    } 

} 

private class CustomSuggestion implements Suggestion { 

    private String fReplace; 
    private String fDisplay; 
    private String fSomeOtherValue; 

    public CustomSuggestion(String display, String replace, String someOtherValue) { 
     fDisplay = display; 
     fReplace = replace; 
     fSomeOtherValue = someOtherValue; 
    } 

    @Override 
    public String getDisplayString() { 
     return fDisplay; 
    } 

    @Override 
    public String getReplacementString() { 
     return fReplace; 
    } 
} 
+0

Salut. J'étais déterminé à faire sans jeter mais je le change et travaille maintenant. Merci. Valeur de chaîne = ((CustomSuggestion) event.getSelectedItem()). FSomeOtherValue; – theleftone

+0

Il est dit dans le javadoc de "réduire l'objet' Suggestion' à la sous-interface ". Je suppose que c'est prévu. – z00bs