GWT: SuggestionBox как глобальная переменная
У меня есть приложение с 2 представлениями и 2 докладчиками. У меня есть фиксированное верхнее меню с окном поиска с использованием SuggestionBox. Я получаю список предложений из базы данных и загружаю его в MultiWordSuggestOracle of SuggestionBox, используя метод addAll(..).
Я использую UiBinder, и это мой код:
@UiField (provided=true) SuggestBox searchEntriesSuggestBox;
MultiWordSuggestOracle oracle;
public MenuBar() {
oracle = new MultiWordSuggestOracle();
searchEntriesSuggestBox = new SuggestBox(oracle);
initWidget(uiBinder.createAndBindUi(this));
}
public void loadUserEntries(Collection<String> entries){
oracle.clear();
oracle.addAll(entries);
}
При первом запуске приложения я загружаю предложения с помощью loadUserEntries(). Проблема заключается в том, что я меняю свое представление (и докладчик), потому что SuggestBox загружает пустой MultiWordSuggestOracle, поэтому мне приходится загружать предложения снова, каждый раз, когда я меняю своего докладчика.
Я хотел бы сохранить предложения (MultiWordSuggestOracle) как глобальную переменную в течение срока службы приложения, чтобы избежать использования метода loadUserEntries.
Я попытался определить глобальную переменную MultiWordSuggestOracle и каждый раз, когда мне нужно загрузить Presenter, создавал новый SuggestBox с моим глобальным MultiWordSuggestOracle. Но это не сработало.
Любая идея?
Благодарю.
1 ответ
Проблема состоит в том, что каждое представление использует свой собственный экземпляр MenuBar, потому что каждое представление создает свое собственное.
Есть разные способы решения вашей проблемы, вы можете использовать несколько ActivityManagers
как это объясняется в этом посте, или вы могли бы иметь фиксированную часть в вашем пользовательском интерфейсе с помощью MenuBar из экрана MVP, или простое решение - использовать статическую переменную и сделать метод загрузки статическим (вызовите этот метод только один раз),
@UiField (provided=true) SuggestBox searchEntriesSuggestBox;
static MultiWordSuggestOracle oracle = null;
public MenuBar() {
if (oracle == null) {
oracle = new MultiWordSuggestOracle();
}
searchEntriesSuggestBox = new SuggestBox(oracle);
initWidget(uiBinder.createAndBindUi(this));
}
public static void loadUserEntries(Collection<String> entries){
oracle.clear();
oracle.addAll(entries);
}