Android view WindowLeaked - PullRequest
       11

Android view WindowLeaked

0 голосов
/ 01 апреля 2019

В настоящее время я работаю с некоторыми приложениями и изучаю их, и я столкнулся с этой ошибкой.Это произошло просто из ниоткуда, и раньше, кажется, все работает нормально.

Я прочитал некоторые вопросы, связанные с моей проблемой, но не могу связать свои коды с ними, поэтому я действительно запутался.Я все еще начинающий, поэтому любая помощь будет оценена.

Logcat

4386-4386/com.example.gab.quadrantms E/WindowManager: android.view.WindowLeaked: Activity com.example.gab.quadrantms.Home has leaked window DecorView@abb868f[] that was originally added here
    at android.view.ViewRootImpl.<init>(ViewRootImpl.java:576)
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:363)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:128)
    at android.app.Dialog.show(Dialog.java:454)
    at com.example.gab.quadrantms.SurveysFragment$1$1$1.onDataChange(SurveysFragment.java:120)

Фрагмент

if (getActivity() != null) {
                                if (myPosition.equals("Project Manager")) {
                                    bottomSheetDialog = new BottomSheetDialog(getActivity());
                                    final View bottomSheetDialogView = getLayoutInflater().inflate(R.layout.bottom_dialog_layot, null);
                                    bottomSheetDialog.setContentView(bottomSheetDialogView);

                                    View viewView = bottomSheetDialogView.findViewById(R.id.view);
                                    View assignView = bottomSheetDialogView.findViewById(R.id.assign);
                                    View deleteView = bottomSheetDialogView.findViewById(R.id.delete);

                    bottomSheetDialog.show();  //THIS LINE WHERE THE ERROR IS POINTING    

                                    if (bottomSheetDialog.isShowing()) {                                          

                                        assignView.setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View v) {
                                                String id = viewHolder.setSurveyID(model.getSurveyID());
                                                String loc = viewHolder.setSurveyLocation(model.getSurveyLocation());
                                                String type = viewHolder.setSurveyType(model.getSurveyType());
                                                String progress = viewHolder.setProgress(model.getProgress());
                                                if (progress.equals("Finished")) {
                                                    Toast.makeText(getContext(), "This project is Already Finished.", Toast.LENGTH_SHORT).show();
                                                } else {
                                                    Intent surveyAssign = new Intent(getActivity(), AssignActivity.class);
                                                    surveyAssign.putExtra("id", id);
                                                    surveyAssign.putExtra("loc", loc);
                                                    surveyAssign.putExtra("type", type);
                                                    surveyAssign.putExtra("progress", progress);
                                                    startActivity(surveyAssign);
                                                    getActivity().finish();
                                                }
                                            }
                                        });

                                        deleteView.setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View v) {
                                                AlertDialog.Builder message = new AlertDialog.Builder(getContext());

                                                message.setMessage("Are you sure you want to Delete this Project?").setCancelable(false)
                                                        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                                            @Override
                                                            public void onClick(final DialogInterface dialog, int which) {
                                                                String id = viewHolder.setSurveyID(model.getSurveyID());
                                                                mRemoveDuplicate = FirebaseDatabase.getInstance().getReference().child("Surveys");
                                                                mRemoveDuplicate.child(id).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
                                                                    @Override
                                                                    public void onSuccess(Void aVoid) {
                                                                        Toast.makeText(getContext(), "Project Deleted.", Toast.LENGTH_SHORT).show();
                                                                        dialog.dismiss();
                                                                    }
                                                                });
                                                            }
                                                        })
                                                        .setNegativeButton("No", new DialogInterface.OnClickListener() {
                                                            @Override
                                                            public void onClick(DialogInterface dialog, int which) {
                                                                dialog.dismiss();
                                                            }
                                                        });
                                                AlertDialog alert = message.create();
                                                alert.setTitle("Message");
                                                alert.show();
                                            }
                                        });

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Когда происходит сбой приложения?Это при показе диалога или при закрытии диалога.Если это происходит при закрытии диалогового окна, проверьте, правильно ли вы закрываете диалоговое окно.

В основном WindowLeaked Ошибка возникает, когда вы завершаете родительское действие перед правильным закрытием диалогового окна.

Примечание. Если во время OnClick приложения происходит сбой при assignView , проблема может заключаться в завершении действия здесь getActivity().finish(); в OnClickListener.

0 голосов
/ 01 апреля 2019

Пожалуйста, добавьте Имя активности во Все Диалог , где запускается ваш фрагмент.

Например.

bottomSheetDialog = new BottomSheetDialog(YourActivity.this);

AlertDialog.Builder message = new AlertDialog.Builder(YourActivity.this);

Надеюсь, это поможет Вам!

Спасибо.

...