2012-01-03 7 views
2

は、私はここにいくつかのコードを持っている私の活動では、そう を(WebViewClientを拡張私の活動のクラスといくつかのクラスは、)私はこのような何かを私のAndroidアプリでダイアログを閉じることができません:

protected Dialog onCreateDialog(int id) { 
    switch(id) { 
     case 1: 
      //logging vk dialog 
      Log.d("OLOLOLO", "webview"); 
      dialog = new Dialog(this); 
      dialog.setContentView(R.layout.webviewl); 
      dialog.setTitle("loggin in"); 

      webview = (WebView) dialog.findViewById(R.id.vkWebView); 
      webview.setWebViewClient(wvClforVK); 
      webview.loadUrl(url); 
      // do the work to define the pause Dialog 
      break; 
     case 2: 
      // already logged vk dialog 
      break; 
     default: 
      dialog = null; 
    } 
    return dialog; 
} 

buttonclickリスナーにshowDialog(1)と電話してください。私は、ダイアログを閉じる必要があるが、私はこれを行うには正しくないことになると思うonPageFinished()方法で私のWebViewクラスで

は:

MyActivity activity = new MyActivity(); //my main activity object 
activity.dismissDialog(1); 

それは動作しません:

01-03 20:41:10.758:E/AndroidRuntime(1172):java.lang.IllegalArgumentExceptionが:ID 1とは対話がこれまでの活動#にShowDialog

どのようにすることができを通じて示されませんでした。私の活動オブジェクトをに正しく入力してくださいダイアログを閉じますか?

+2

私は「OLOLOLO」のようなものでログをスパムする唯一の人ではないことを嬉しく思っています – MrZander

答えて

3

問題は、ダイアログを持たない新しいアクティビティをインスタンス化することです。ダイアログを作成したのと同じアクティビティインスタンスでdismissDialogメソッドを呼び出す必要があります。それを別のクラスで呼び出す場合、そのクラスに何らかのアクティビティを渡す必要があります(たとえば、パラメータとして渡すことができます)。とにかく、この方法でアクティビティをインスタンス化することはお勧めしません。プロジェクトのマニフェストファイルでアクティビティを定義した場合は、自動的にインスタンス化されます。

+0

webviewのページが既に読み込まれているときに私のダイアログを破壊するにはどうしたらいいですか? – user1128677

+0

あなたの活動の全クラスを私に送ってください。あなたのonPageFinishedメソッドを見たいと思います。 onPageFinished webView.setWebViewClient(新WebViewClient(){ \t \t \t @Override \t \t \tます。public void(WebViewの表示、文字列のURL){\t \t \t \t \t \t \tスーパー: – strongmayer

+0

あなたはこのような何かを記述する必要があります。 onPageFinished(ビュー、URL); \t \t \t \t YourActivity.this.dismissDialog(YOUR_DIALOG_ID); \t \t \t} \t \t \t \t \t}); – strongmayer

1

例外として、showDialogを使用する前に表示されていないダイアログを閉じようとしています。ダイアログのライフサイクルを確認する必要があります。 Dialog.isShowing()メソッドを使用すると、ダイアログを閉じる前にそのダイアログが表示されていることを確認できます。

+0

私はそれをしました。私の知る限りでは、私のダイアログは解任前に表示されていました。アクティビティオブジェクトの問題...私はそれを訂正できません。 – user1128677

+0

Is MyActivityは新しいアクティビティですか?あなたが同じアクティビティにいる場合は、showDialogを実行します。dismissDialog(1)は必要です(activity.dismissDialog(1)は必要ありません)。使用していない場合は、context = dialog.getContext()、次にcontext.dismissダイアログ(1) –

+0

私はそれを試しました...しかし、コンテキストオブジェクトのdismissDialog()メソッドはありません – user1128677