10

アプリケーションでメイン メニューを完成させようとしています。OnBackPressed メソッドに AlertDialog を追加するのは簡単でいい感じだと思いました。しかし、何らかの理由で、あらゆる種類のエラーが発生しています。

OnBackPressed で AlertDialog を作成して表示しましたが、戻るボタンを押すとアプリが閉じ、ウィンドウがリークしているというエラーが表示されます。

これを修正する方法はありますか?私は約30分間検索しましたが、この問題を抱えている人は他に見つかりませんでした.

4

4 に答える 4

39

super.OnBackPressed()を呼び出さないようにしてください。次のコードが役立ちます。

@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();

}
于 2012-06-06T02:19:52.307 に答える
7

super.onBackPressed() を呼び出したい場合は、次のコードを使用します。

@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();
}

onSuperBackPressed-method を使用して新しいパブリック メソッドsuperを MyActivity に追加しました。

素晴らしいアイデアを提供してくれたK_Anasに感謝します。

于 2016-10-24T19:34:06.977 に答える
5

OnBackPressed で AlertDialog を作成して表示しましたが、戻るボタンを押すとアプリが閉じ、ウィンドウがリークしているというエラーが表示されます。

内部OnBackPressedで呼び出しているsuper.OnBackPressed()場合、アプリケーションは終了します。これは、の基本実装がOnBackPressed行うことです。メソッドを呼び出さないでくださいsuper。アプリケーションは閉じません。

于 2012-06-05T22:43:06.977 に答える
0

ダイアログで yourActivity.this.onBackPressed() を呼び出します

utility.makeAlertDialog("Cancel Verification","Do you want to cancel the verification process","Cancel Verification",new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface dialog, int which) {
            utility.failureToast("OTP verification");
            Intent intent = new Intent(MobileOTPActivity.this,MobileNumberLoginActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
            finish();
            MobileOTPActivity.this.onBackPressed();
        }
    },"Close");
于 2018-06-23T15:36:10.050 に答える