出现此问题的常见原因是开发人员忘记调用Dialog的dismiss()方法。当我们的Dialog显示出来后,我们需要在适当的时候调用dismiss()方法,以让Dialog消失。
例如,在Dialog的按钮点击事件中,我们需要加入以下代码:
Button button = dialog.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// do something
dialog.dismiss(); // 这里添加dismiss()方法
}
});
这样,当按钮被点击后,Dialog将会被自动关闭。我们可以在其他适当的地方也调用dismiss()方法完成同样的操作。
另外一种情况是,我们希望在Dialog显示时点击外部区域也能关闭Dialog。此时,我们需要调用setCanceledOnTouchOutside(true)方法来解决问题。例如:
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.dialog_layout);
dialog.setCanceledOnTouchOutside(true); // 点击外部区域能关闭Dialog
dialog.show();
这样,当用户点击Dialog外部时,Dialog也会被自动关闭。