【问题标题】:Activity has leaked window androidActivity 已泄露窗口 android
【发布时间】:2015-01-17 10:36:12
【问题描述】:

我在dialog.show() 上遇到了这个问题。完成谷歌搜索,尝试修改对我没有任何帮助。

public void openCameraOrGallery(){

     final Dialog dialog = new Dialog(LoginActivity.this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.choosecamera);
    dialog.getWindow().setLayout(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.WRAP_CONTENT);

    txtGalleryPhoto = (TextView) dialog
            .findViewById(R.id.txt_gallery_photo);
    txtCamera = (TextView) dialog.findViewById(R.id.txt_camera);
    btnClose = (ImageButton) dialog.findViewById(R.id.btn_close);
    btnClose.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });

    txtGalleryPhoto.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent i = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

            startActivityForResult(i, RESULT_LOAD_IMAGE);
            //dialog.dismiss();
        }
    });
    txtCamera.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_REQUEST);
            //dialog.dismiss();

        }
    });

    dialog.show();

}

【问题讨论】:

  • 当应用程序收到Activity has leaked window android 错误?

标签: android window


【解决方案1】:

显然Leaked Window Exception 会出现在您的代码中。

您不应该在显示对话时更改 Activity(因为您的上下文将被更改)。

因此,您必须不断检查当前上下文,如果当前上下文有任何变化,您应该关闭对话。

在您的情况下在您开始新活动之前关闭对话

更新

正常对话会被自动取消。这是实现登录检查的一个棘手方法。

alert.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            Button button = alert.getButton(AlertDialog.BUTTON_POSITIVE);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                  // Code to check the login credentials.
                  if(everythingIsOK)
                  {
                   dialogue.dismiss();
                 }
                 else
                 {
                   // Acknowledge the user 
                     }

                }
            });
        }
    });

【讨论】:

  • 兄弟...我想在用户成功登录时完成活动并启动对话框。如何做到这一点
  • @karthikkolanji 如果您还有其他问题,请将其作为新问题发布。如果答案有帮助,请将其标记为正确。社区对此表示赞赏。
猜你喜欢
  • 2014-03-16
  • 1970-01-01
  • 2016-06-26
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多