2017-09-04 9 views
1

私はJavaScripコードでJavaメソッドを呼び出す方法を知っています。これは@JavascriptInterface注釈によって行われます。しかし、Androidによってどの方法を決定したいのですかJSと呼ばれるべきですか? JS内でAndroidのDialogを呼び出していますが、ここでは、JS内でどの関数を呼び出さなければならないかを決定するswitch文があります。私はダイアログが同期していないので、動作していないフラグを使用したので、ダイアログも開始する前にメソッドshowDialog()が完了しています。反対側のAndroid-JS通信に到達する方法はありますか? WebページがあなたのWebViewにロードされた後Android WebViewの@JavascriptInterfaceに似ていますか?

@JavascriptInterface 
public int showDialog(){ 
    new AlertDialog.Builder(this.activity) 
      .setTitle("Share iamge as...") 
      .setItems(new CharSequence[]{"Image", "PDF document", "Print"}, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        switch (which){ // this switch should determine which JS function I call 
         case 0: chosenMethod = 0; // here should be called JS function (eg. exportImage() from JS code) 
          Log.v("Dialog onClick()", "method chosen" + chosenMethod); 
          break; 
         case 1: chosenMethod = 1; 
          Log.v("Dialog onClick()", "method chosen" + chosenMethod); 
          break; 
         case 2: chosenMethod = 2; 
          Log.v("Dialog onClick()", "method chosen" + chosenMethod); 
          break; 
        } 
       } 
      }) 
      .create().show(); 
    Log.v("Dialog out of onClick", "method chosen" + chosenMethod); 
    return chosenMethod; 
} 
+0

「JSをWebViewで呼び出す方法」を知りたいですか? –

+0

@VladMatvienkoええ、コードを投稿するよね – soommy12

答えて

1

あなたは、JSの機能を実行するために、

webView.loadUrl("javascript:doSomething()"); 

をいつでも行うことができます。

動作しない場合:ウェブビューの設定(セキュリティ/ js)を確認してください。

+0

私の 'WebView'をメソッドに渡すべきでしょうか、それに対して' loadUrl'を呼び出す別のオプションがありますか? – soommy12

+0

あなたはpresenter/activity/fragmentのダイアログを開いて、ダイアログのコールバックを使って作者に戻ってください。プレゼンタ/アクティビティ/フラグメントのコールバック実装は、WebViewでJS呼び出しを実行できます。しかし、これは実際には別の問題です。幸運 – Frank

+0

それは魅力的なように働いていますが、私は関数を呼び出すときに1つの問題があります: 'Uncaught ReferenceError:methodNameが定義されていません。 ' – soommy12

関連する問題