活动已泄露窗口android

时间:2015-01-17 10:36:13

标签: android window

我在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();

}

1 个答案:

答案 0 :(得分:1)

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

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

因此,您必须不断检查当前上下文,如果当前上下文中有更改,您应该忽略对话。

在您的情况下,在开始新活动之前解除对话

更新

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

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 
                     }

                }
            });
        }
    });