2

我有一点问题。就像在代码中一样,我正在尝试创建一个动态 MenuItem 列表。这没问题,但我想要选择/单击的项目。但我不确定如何正确实施。所有这一切都发生在我的视图中,我想将值设置为在演示者中继续。谢谢任何帮助。

chooseProfileMenuBar = new MenuBar(true);
for (int i = 0; i<names().size(); i++) {

  final MenuItem menuItemChoose = new MenuItem(names.get(i), new Command(){

    @Override           
        public void execute() {

      // TODO set the onClicked value/name at index i               

    }
  });
  chooseProfileMenuBar.addItem(menuItemChoose);
}
return chooseProfileMenuBar;
4

3 回答 3

2

如果可能的话,您可以再做一件事,我有创建运行时的下载菜单,所以我添加了 HashMap 并在该 HashMap 中添加了 names.get(i) 和下载链接,所以看起来像

map.put(names.get(i),"link"),

现在在执行()中,我添加了Window.open(map.get(menuItem.gettext()),"_blank");

我的项目中还有一个菜单是报告菜单,因此来自数据库的报告列表即将到来

for(final Temp report : listReports){
    MenuItem menuItem = new MenuItem(report.getType().toString(), new Command() {
        @Override
                public void execute() {
                    getUiHandlers().showReportPanel(report);
                }
            });
        reportMenuBar.addItem(menuItem);
 }
于 2013-03-22T13:19:03.490 回答
1

使用 UIHandler概念的好处在视图和演示者之间进行通信。

创建接口:

import com.gwtplatform.mvp.client.UiHandlers;

public interface MyUiHandler extends UiHandlers {
    void onMenuSelected(MenuItem menuitem);

}

那么在你看来

public class MyMVPView extends ViewWithUiHandlers<MyUiHandler> implements
        MyMvPPresenter.MyView {
.
.
.
.

使用 Presenter 实现该 uihandler 接口

public class MyMvPPresenter
        extends
        Presenter<MyMVPPresenter.MyView, MyMVPPresenter.MyProxy>
        implements MyUiHandler {


//in the same presenter 
public interface MyView extends View, HasUiHandlers<UserDashboardUiHandler> {
    //  

.
.
.

然后您将在演示者中获得覆盖方法,例如

@Override
    public voidonMenuSelected(MenuItem menuitem) {
         //Your implementation here
    } 

用法

@Override           
        public void execute() {

        getUiHandlers().showReportPanel(menuItemChoose );              

    }
于 2013-03-22T13:20:02.553 回答
0

你是对的 vicR,从 menuItemChoose 中获取值是正确的。你可以这样做

public void execute() {
    onclickMenu(menuItemChoose);
}

void onclickMenu(MenuItem menuItemChoose){
    if(menuItemChoose.gettext().equals("abc"){
         //call handler method that implemented you in presenter
    }
}
于 2013-03-22T12:47:03.277 回答