这个错误通常在Dialog尝试在Activity已关闭或不可见时显示时抛出。出现这种情况的原因是因为Dialog仍在依赖Activity的WindowManager,但Activity已经被销毁或不可见了。
为了解决这个问题,我们需要在Dialog显示之前检查Activity是否已经被Detach。我们可以使用Activity的isFinishing()方法来检查Activity是否已完成。在Dialog中加入如下代码即可:
if(!((Activity)context).isFinishing()){ //创建并显示Dialog }
这将确保当前Activity是活动的并且仍然附加到WindowManager。
以下是完整的Dialog代码示例:
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Error"); builder.setMessage("Something went wrong"); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Do something } }); AlertDialog dialog = builder.create();
if(!((Activity)this).isFinishing()){ dialog.show(); }