窗口泄漏,但希望在用户单击肯定按钮时完成活动

时间:2019-06-01 11:18:55

标签: android alertdialog

我已经读过这篇文章:Activity has leaked window that was originally added 和其他一些帖子。

这是例外行:E / WindowManager:private android.view.WindowLeaked:void ActivitysaveMessage()com.tekitsolutions.remindme.Activity.AddReminderActivity {  泄漏了最初添加的窗口DecorView @ 87ebe2a [AddReminderActivity] String heremessage =“”;         atif android.view.ViewRootImpl。(ViewRootImpl.java:534!isEditReminder)     {

例外:

E/WindowManager:private android.view.WindowLeaked:void ActivitysaveMessage() com.tekitsolutions.remindme.Activity.AddReminderActivity{
 has leaked window DecorView@87ebe2a[AddReminderActivity] that was originally addedString heremessage = "";
        atif android.view.ViewRootImpl.<init>(ViewRootImpl.java:534!isEditReminder)
    {
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:346)
       message at= android.view.WindowManagerImplgetResources().addViewgetString(WindowManagerImplR.java:94string.reminder_added_successfully);
        at android.app.Dialog.show(Dialog.java:329)
} else {
      at android.app.AlertDialog$Builder.show(AlertDialog.java:1125)
       message at= com.tekitsolutions.remindme.Activity.AddReminderActivitygetResources().saveMessagegetString(AddReminderActivityR.java:1179string.reminder_update_successfully);
        at com.tekitsolutions.remindme.Activity.AddReminderActivity.onResponse(AddReminderActivity.java:1547)
   reminderId = tempReminderId;
   at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:71)
        atnew android.os.Handler.handleCallbackAlarmReceiver(Handler).java:873cancelAlarm(this, reminderId);
        at android.os.Handler.dispatchMessage(Handler.java:99)}

        at androidandroidx.osappcompat.Looperapp.loop(LooperAlertDialog.java:201)
     Builder alertDialogBuilder = atnew androidandroidx.appcompat.app.Activit

我的代码:

private void saveMessage() {
        String message = "";
        if (!isEditReminder) {
            message = getResources().getString(R.string.reminder_added_successfully);
        } else {
            message = getResources().getString(R.string.reminder_update_successfully);
            reminderId = tempReminderId;
            new AlarmReceiver().cancelAlarm(this, reminderId);
        }

        androidx.appcompat.app.AlertDialog.Builder alertDialogBuilder = new androidx.appcompat.app.AlertDialog.Builder(this, R.style.dialogBoxStyle);
        alertDialogBuilder.setCancelable(false);
        alertDialogBuilder.setTitle("").setMessage(message).setPositiveButton(getResources().getString(R.string.ok), new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Intent intent = getIntent();
                showLog("ARA: "+ reminderId);
                intent.putExtra(REMINDER_ID, reminderId);
                setResult(RESULT_OK, intent);
                finish();
            }
        });

        androidx.appcompat.app.AlertDialog dialog = alertDialogBuilder.create();
        dialog.show();

    }

2 个答案:

答案 0 :(得分:0)

因为您要退出活动后尝试打开一个对话框。在这种情况下,活动将在打开对话框之前关闭

// remove below line
 super.onBackPressed(); 
from your onBackPressed() method 

答案 1 :(得分:0)

 @Override
    public void onBackPressed() {
       if (!etTitle.getText().toString().isEmpty()) {
           AlertDialog.Builder builder = new AlertDialog.Builder(this);
           builder.setCancelable(false);
           builder.setMessage("Do you want to save Reminder?");
           builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //if user pressed "yes", then he is allowed to exit from application
                finish();
            }
        });
        builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //if user select "No", just cancel this dialog and continue with app
                dialog.cancel();
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
      }            
    }

请尝试一下。 希望对您有帮助...!