【问题标题】:GWT Array of checklist click handler not working清单单击处理程序的 GWT 数组不起作用
【发布时间】:2014-07-07 15:29:56
【问题描述】:

我一直在尝试为它们生成一组复选框和动态单击处理程序,但处理程序不起作用。

任何建议都将受到欢迎。提前感谢您的宝贵时间。

private void addButtonListener() {      
    goButton.addClickHandler(new ClickHandler() {           
        @SuppressWarnings("rawtypes")
        @Override
        public void onClick(ClickEvent arg0) {              
            String strQuery="Select BRANCH_NAME from SAMPLE_ACC_BRANCH where GL_CODE='"+gll_textfield.getText().trim()+"'";
            HibernateImplUtils.getSearchResult(strQuery, new AsyncCallback() {                  
                private int i;
                @Override
                public void onFailure(Throwable arg0) 
                {arg0.printStackTrace();}
                @Override
                public void onSuccess(Object arg0) {                        
                    System.err.println("Inside Success");
                    List branchNameList=(List) arg0;
                    System.err.println("Branch List:::"+branchNameList);                        
                        for(i=0;i<branchNameList.size();i++){
                            checkbox[i]=new CheckBox((String) branchNameList.get(i));                               
                            vpanel.add(checkbox[i]);
                            checkbox[i].addClickHandler(new ClickHandler() {                                    
                                @Override
                                public void onClick(ClickEvent arg0) {                                      
                                    if(checkbox[i].getValue()){
                                        System.out.println("NAME::::"+checkbox[i].getText());
                                    }
                                    System.out.println("Selected check box ::::"+checkbox[i].getText());
                                }
                            });                                             
                    }                       

                }
            });             

        }
    });

}   

【问题讨论】:

  • 说“它不工作”是没有帮助的。请准确说明问题是什么,不要让潜在的帮助者不得不尝试解决问题。
  • ValueChangeHandler 可能是更好的选择。
  • @Synchro Dude,非常抱歉没有具体说明问题。实际上,单击处理程序仅在每次单击任何复选框时才读取最后一个索引值。
  • @salk31 :- 老兄,它的效果是一样的 :( !!!
  • 但是,如果我试图打印 codecheckbox[i].getText() 它会抛出一个空指针。

标签: gwt gwt-widgets


【解决方案1】:

“i”的范围是狡猾的。最快的解决方法是为您的事件处理程序制作“最终”副本。例如"最终 int i2 = i"

内部类可能在创建过程中需要索引值。

我很想使用对您创建的复选框的最终引用或传递给事件处理程序的引用(这样您也可以使用单个实例)。

(修改)

【讨论】:

  • 按您所说的尝试过,但复合赋值运算符不会接受。似乎无法在“for循环”内以这种方式创建动态处理程序。
  • 对不起,是的。我通常在允许的地方迭代一个集合。要么使用对复选框的最终引用,要么制作 int 的最终副本,例如"最终 int i2 = i;
  • 宾果游戏,你得到了一个! :)
【解决方案2】:
    final int i2=i;                         
    checkbox[i2].addClickHandler(new ClickHandler() {                                    
      @Override
        public void onClick(ClickEvent arg0) {
        if(checkbox[i2].getValue()){                                           
           System.out.println("NAME::::"+checkbox[i2].getText());
                }

              }
          }); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2012-03-23
    • 1970-01-01
    相关资源
    最近更新 更多