Я пытаюсь сделать SuggestBox, показывающий предложения только после того, как были введены 2 символа. Моя идея состояла в том, чтобы скрыть предложения, когда длина текста равна 1, используя класс DefaultSuggestionDisplay. Я пытался прикрепить различные обработчики, такие как KeyPressHandler и KeyUpHandler, к самому SuggestionBox и его TextBox, но ни один из них не работал. Есть ли у вас какие-либо предложения"? :D
Как отображать предложения в GWT SuggestBox только после ввода 2 символов?
Ответы (2)
Вы можете расширить DefaultSuggestionDisplay
и переопределить метод showSuggestions
:
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);
}
}
Вы должны передать свой новый дисплей конструктору SuggestBox
:
public class MySuggestBox extends SuggestBox {
public MySuggestBox() {
super(
new MySuggestOracle(),
new TextBox(),
new MySuggestionDisplay());
}
}
В этом конструкторе вы должны указать:
- ваш собственный класс
SuggestOracle
(здесь он называетсяMySuggestOracle
) - я полагаю, у вас есть один TextBox
- это виджет по умолчанию для ввода текста (вы можете указать свой, просто нужно реализоватьHasText
)SuggestionDisplay
- используйте тот, у которого переопределен методshowSuggestions
.
Это полный рабочий пример кода, показывающий предложения по крайней мере для двух введенных символов:
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;
}
}
}
person
Adam
schedule
05.06.2016
Я использовал другой вариант, но теперь он работает. Кроме того, когда вы вводите 2 символа, а затем удаляете последний, предложения по-прежнему отображаются для 2 символов, поэтому я добавил else super.hideSugesstions(); к if в MySuggestionDisplay. Большое спасибо!
- person AndreiXwe; 06.06.2016
Вы можете расширить SuggestBox и переопределить метод showSuggestionList()
.
Добавление KeyUpHandler не работает, потому что вы добавляете другой KeyUpHandler, а не заменяете тот, который SuggestBox добавил в свой собственный TextBox.
РЕДАКТИРОВАТЬ:
@Override
showSuggestionList() {
if (getTextBox().getValue().length() > 1) {
super.showSuggestionList();
}
}
person
Andrei Volgin
schedule
03.06.2016
спасибо за совет, но у меня проблема: gyazo.com/0e168c8f98ee61ce7b859d6002a1abc5
- person AndreiXwe; 04.06.2016
Разве
super.showSuggestionList()
не решит эту проблему? Когда у вас более 1 персонажа, просто позвольте реализации по умолчанию сделать свою работу.
- person Adam; 05.06.2016
он по-прежнему показывает предложения, когда я набираю только один символ
- person AndreiXwe; 05.06.2016
все еще не работает, даже если я использую getValueBox вместо getTextBox (устарело)
- person AndreiXwe; 06.06.2016
SuggestOracle
возвращал ответы только тогда, когда запрос достаточно длинный? - person Thomas Broyer   schedule 03.06.2016