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,所以每次更改演示者时我都必须再次加载建议。

我想在应用程序的生命周期内将建议(MultiWordSuggestOracle)维护为全局变量,以避免使用 loadUserEntries 方法。

我尝试定义一个全局变量 MultiWordSuggestOracle,每次我必须加载 Presenter 时,使用我的全局 MultiWordSuggestOracle 创建一个新的 SuggestBox。但它没有用。

任何的想法?

谢谢。

4

1 回答 1

1

问题是每个视图都使用自己的 MenuBar 实例,因为每个视图都创建自己的。

有不同的方法可以解决您的问题,您可以使用多种方法,ActivityManagers就像在这篇文章中解释的那样,或者您可以在您的 UI 中有一个固定部分,菜单栏不在您的 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);
 }
于 2013-03-29T06:55:14.610 回答