2011-11-08 15 views
1

アプリケーションにAlertDialog.Builderが表示されています。画面を回転させると、「アプリケーションがウィンドウをリークしました」というエラーが表示されます。 onPause()イベントでAlertDialogをキャンセルするにはどうすればよいですか? Ad.cancel()のメソッドが表示されません。画面が回転しているときにAlertDialogを取り消します。

更新:作業モデル用のコードが編集されました。

private AlertDialog inputDlg; 
    ... 
    @Override 
    protected void onPause() 
    { 
    // close dialog if it's showing 
    if (inputDlg != null) 
     if (inputDlg.isShowing()) 
      inputDlg.dismiss(); 

     super.onPause(); 
    } 

    ... 

    private void dlgUserPrompt (Context c) 
    { 
     // Set an EditText view to get user input 
     final EditText input = new EditText (c); 

     AlertDialog.Builder Ab = new AlertDialog.Builder (this); 
     Ab.setTitle("title"); 
     Ab.setMessage("I won't explode if you rotate this"); 
     Ab.setView(input); 
     inputDlg = Ab.show(); 
    } 

答えて

1

私はあなたがdismissメソッドを探していると思います。

+0

実際に、AlertDialog.Builderを使用すると、単純な却下方法はありません。 Kurtisの返答を読んだところ、解は実際にはかなり複雑なように見えます。 – wufoo

+1

AlertDialog.Builderのshow()メソッドは、実際にdismissメソッドを持つAlertDialogオブジェクトを返します。あなたの視点で非常に計算集中的なことをしない限り、簡単な解決策であるため、あなたのマニフェストでこれを上書きするのではなく、設定の変更に対してアクティビティをkill /再起動させるだけです。 – Chris

+0

Chrisに感謝します。それは私を軌道に乗せた。コードは上記で更新されました。 – wufoo

0

これを行うには、onConfigurationChange()フックを無効にする必要があります。このdocumentは、構成の変更が正確であるかどうか、およびそれらを処理する方法について詳しく説明します。

関連する問題