2017-03-25 8 views
0

私は、Javaのw3c.dom.eventsを使用してボタンのクリックイベントを処理しようとしていますが、静的メソッドaddEventListenerにstatic refrenceを作成できません。私のコードはここにあります。アクションwebviewのw3c domのリスナーイベント

Node button = form.getElementsByTagName("button").item(0); 
          if(button!=null && button.hasAttributes()){ 
           NamedNodeMap attr = button.getAttributes(); 
           for(int j=0; j<attr.getLength(); j++){ 
            Attr atribute = (Attr)attr.item(j); 
            if(atribute.getValue().equals("submit")){ 
             System.out.println("submit button detected."); 
             org.w3c.dom.events.EventListener listener = new org.w3c.dom.events.EventListener(){ 
              @Override 
              public void handleEvent(org.w3c.dom.events.Event evt) { 
               System.out.println("this is a action listener."); 
              } 

             }; 
             ((EventTarget) button)org.w3c.dom.events.EventTarget.addEventListener("click", listener, false); //here i am getting the error 

            } 

          } 
         } 

答えて

0

あなたは「静的でないメソッドは、addEventListenerをstatic参照できません」されるエラーの意味: 方法:addEventListenerは静的メソッドではありません - これはあなたが直接そのクラスから呼び出すことができないことを意味し、それを呼び出すために 'EventTarget'を実装するオブジェクトを作成する必要があります。

((EventTarget) button)org.w3c.dom.events.EventTarget.addEventListener("click", listener, false); 

我々はこのコード行を打破するのであれば、私たちは持っている:どのようなメソッド呼び出しaddEventListenerリターン(無効)上にキャストし、別のタイプが続い(EventTarget)button、「ボタン」と呼ばれるオブジェクトの型キャストを。だから基本的にコンピュータが見るのはEventTargetのインターフェースの中にメソッドaddEventListenerを呼び出したことです(この方法ではエラーが発生しません。メソッドが静的ではないため、クラス/インターフェースから直接呼び出すことはできません)。 EventTarget。 注:インターフェイス内の静的メソッドは存在できません。

((EventTarget)button).addEventListener("click", listener, false); 

したがって、この場合には、あなたがのEventTargetにボタンを型キャストされています。ちょうどあなたがEventlistenerを追加するために作成したボタンオブジェクトを使用してこの問題を解決するには

.に注目してください。イベントリスナーをオブジェクト(ボタン)に追加できるようになります。

+0

輸入に問題があり、お手数をおかけしました。 – captainchhala

0

輸入に問題がありました。ここに私の解決されたコードがあります。

`public class DetectForm { 
    private HTMLInputElement password = null; 
    private HTMLInputElement username = null; 
    private boolean isForm = false; 
    public void detect(Document doc){ 


     if (doc!=null && doc.getElementsByTagName("form").getLength() > 0) { 
      HTMLFormElement form = (HTMLFormElement) doc.getElementsByTagName("form").item(0); 
      NodeList nodes = form.getElementsByTagName("input"); 

      for (int i = 0; i < nodes.getLength(); i++) { 
       if(nodes.item(i).hasAttributes()){ 
        NamedNodeMap attr = nodes.item(i).getAttributes(); 
        for (int j=0 ; j<attr.getLength();j++){ 
         Attr atribute = (Attr)attr.item(j); 
         if(atribute.getValue().equals("password")){ 
          System.out.println("Password detected"); 
          password = (HTMLInputElement) nodes.item(i); 
          username = (HTMLInputElement) nodes.item(i-1); 
          //       password.setValue("helloword"); 
          //       username.setValue("helloword"); 
          isForm = true; 
         } 
        } 
       } 

      } 

      EventListener listener = new EventListener() { 
       @Override 
       public void handleEvent(Event evt) { 
        System.out.println("action listener from DOM."); 
        if(username!=null && password!=null){ 
         String user = username.getValue(); 
         String pass = password.getValue(); 
        } 


       } 
      }; 
      if(isForm){ 
       Node button = form.getElementsByTagName("button").item(0); 
       if(button!=null && button.hasAttributes()){ 
        NamedNodeMap attr = button.getAttributes(); 
        for(int j=0; j<attr.getLength(); j++){ 
         Attr atribute = (Attr)attr.item(j); 
         if(atribute.getValue().equals("submit")){ 
          System.out.println("submit button detected."); 
          ((EventTarget) button).addEventListener("click", listener, false); 

         } 

        } 
       } 
      } 

     } 




    } 

} 
` 
関連する問題