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);
 }
Другие вопросы по тегам