Утекшее окно, но хотите завершить деятельность, когда пользователь нажимает на положительную кнопку - PullRequest
0 голосов
/ 01 июня 2019

Я уже читал это: Активность просочилась в окно, которое было первоначально добавлено , а также некоторые другие сообщения.

Это строка исключения: E / WindowManager: private android.view.WindowLeaked: void ActivitysaveMessage () com.tekitsolutions.remindme.Activity.AddReminderActivity {есть утечка окна DecorView @ 87ebe2a [AddReminderActivity], который был первоначально добавленStringheremessage = "";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 голосов
/ 01 июня 2019
 @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();
      }            
    }

Пожалуйста, попробуйте. Надеюсь, это тебе поможет ...!

0 голосов
/ 01 июня 2019

Поскольку вы пытаетесь открыть диалоговое окно после выхода из действия.В этом случае действие закрывается до открытия диалога

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