Вопрос по android – Android, заставляющий AlertDialog onBackPressed

7

Я пытаюсь завершить мое главное меню в моем приложении. Я подумал, что было бы просто приятно добавить AlertDialog в метод OnBackPressed. Однако по какой-то причине я получаю все виды ошибок.

Я создал AlertDialog в OnBackPressed и покажу его, но приложение просто закрывается, когда я нажимаю кнопку "Назад", и я получаю сообщения об ошибках, сообщающие, что окно утекло.

Есть идеи как это исправить? Я искал около 30 минут и не смог найти кого-либо еще с этой проблемой.

@AlexLockwood вы бы сказали, что я действительно, правда,really нужно показать диалоговое окно с предупреждением, если в противном случае внесенные пользователем изменения будут потеряны при простом возвращении? winklerrr
Показать код дляonBackPressed()... хотя я не уверен, что то, что вы пытаетесь сделать, является хорошей идеей. Squonk
AlertDialogs, которые отображаются при нажатии кнопки «назад» (т. Е. Диалоги подтверждения выхода)severely замедлить пользовательский опыт. Я делал это раньше и был очень удивлен тем, насколько быстрым оказалось мое приложение, когда я удалил их в следующей версии. Не используйте их, если вы действительно,really, really нужно :). Alex Lockwood

Ваш Ответ

4   ответа
4

Если вы хотите вызвать 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 сsuper-метод к MyActivity.

Спасибо идет кK_Anas за предоставление отличной идеи.

34

Попробуй не звонить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();

}
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");
5

I created the AlertDialog in the OnBackPressed and show it but the app just closes when I press the back button and I get errors saying that the window is leaking.

Если внутри вашегоOnBackPressed ты звонишьsuper.OnBackPressed() затем приложение будет завершено, так как это базовая реализацияOnBackPressed делает. Не звонитеsuper метод, и приложение не будет закрыто.

Похожие вопросы