0

2 つのビューと 2 つのプレゼンターを持つアプリケーションがあります。SuggestionBox を使用した検索ボックス付きの固定トップ メニューがあります。データベースから候補リストを取得し、addAll(..) メソッドを使用してそれを SuggestionBox の MultiWordSuggestOracle にロードします。

私は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 をロードするため、プレゼンターを変更するたびに提案を再度ロードする必要があります。

loadUserEntries メソッドの使用を避けるために、アプリの存続期間中は提案 (MultiWordSuggestOracle) をグローバル変数として維持したいと考えています。

グローバル変数 MultiWordSuggestOracle を定義してみました。Presenter をロードする必要があるたびに、グローバルな MultiWordSuggestOracle を使用して新しい SuggestBox を作成しました。しかし、うまくいきませんでした。

何か案が?

ありがとう。

4

1 に答える 1

1

問題は、各ビューが独自の MenuBar インスタンスを作成するため、各ビューが独自の MenuBar インスタンスを使用することです。

問題を解決するにはさまざまな方法があります。ActivityManagersこの投稿で説明されているように複数を使用するか、MVP ディスプレイの外にある MenuBar を使用して UI に固定部分を配置するか、静的変数を使用するのが簡単な解決策です。 load メソッドを static にします (このメソッドを 1 回だけ呼び出します)。

 @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);
 }
于 2013-03-29T06:55:14.610 に答える