2012-06-05 11 views
7

私のアプリケーションでメインメニューを完成させようとしています。私は、OnBackPressedメソッドでAlertDialogを追加するのは簡単なことだと思っていました。しかし何らかの理由で私はあらゆる種類のエラーを受けています。AndroidでのAlertDialogのプロンプト

私はOnBackPressedでAlertDialogを作成して表示しましたが、戻るボタンを押すとアプリケーションが終了し、ウィンドウが漏れているというエラーが表示されます。

これを修正する方法はありますか?私は約30分間検索し、この問題を持つ他の誰かを見つけることができませんでした。

+0

'onBackPressed()'のコードを表示してください...あなたがしようとしていることが良いアイデアであるとは確信していません。 – Squonk

+1

戻るボタンが押されたときに表示されるAlertDialog(つまり、「終了ダイアログの確認」)***は、ユーザーエクスペリエンスを著しく低下させます。***私はこれまでにやったことがあり、後のバージョンで削除したときのアプリの速さがどれほど速いかは非常に驚いていました。あなたが本当に、本当に*、***本当に***が必要でない限り、それらを使用しないでください:)。 –

+0

@AlexLockwoodあなたは本当に本当に**本当に**警告が表示される必要がある場合は、ユーザーが行った変更が単純に戻って失われると言うでしょうか? – winklerrr

答えて

2

私はOnBackPressedでAlertDialogを作成して表示しましたが、戻るボタンを押すとアプリケーションが終了し、ウィンドウが漏れているというエラーが表示されます。

OnBackPressedあなたがsuper.OnBackPressed()を呼び出している場合は、その内側にはOnBackPressedの基本実装が何をするかだとアプリケーションは、終了します。 superメソッドを呼び出さないでください。アプリケーションは終了しません。

30

super.OnBackPressed()を呼び出さないようにしてください、このコードは助けるshoul:

@Override 
public void onBackPressed() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Are you sure you want to exit?") 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        //finish(); 
        MyActivity.this.onSuperBackPressed(); 
        //super.onBackPressed(); 
       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
    /* 
    if (handleCancel()){ 
     super.onBackPressed(); 
    } 
    */ 
} 

public void onSuperBackPressed(){ 
    super.onBackPressed(); 
} 

I:

@Override 
public void onBackPressed() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Are you sure you want to exit?") 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        MyActivity.this.finish(); 
       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 

} 
3

あなたがsuper.onBackPressed()を呼び出したい場合は、このコードを使用します新しい公開方法onSuperBackPressedをMyActivityにsuperという方法で追加しました。

素晴らしいアイデアを提供してくれてありがとう、K_Anasに行ってください。