我有一个ListActivity,其中包含包含一些文本和按钮的项目。当按下按钮时,我可能需要显示AlertDialog以询问用户他是否确定要执行操作。所以这是活动的onCreateDialog:
@Override
protected Dialog onCreateDialog(int id)
{
switch (id)
{
case CONFIRM_DELETE_DLG:
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getString(R.string.remove_confirmation))
.setCancelable(false)
.setPositiveButton(R.string.caption_yes, this)
.setNegativeButton(R.string.caption_no, this);
return builder.create();
}
default:
break;
}
return null;
}
(只有一种类型的对话框,所以这个功能太过分了,但它有效。)
当按下对话框中的按钮时,我的onClick(DialogInterface对话框,int which)函数被调用。它执行处理删除操作所需的操作,然后调用dismissDialog(CONFIRM_DELETE_DLG)。
最后,在我的Activity的onDestroy()中,我在try / catch块中调用removeDialog(CONFIRM_DELETE_DLG),这允许我忽略从未创建过对话框的情况。
问题:
通常我第一次调用对话框时,它可以正常工作。大约每隔一次我输入这个ListActivity并调用这个对话框,我在builder.create()调用上得到以下内容:
Attempted to add application window with unknown token
我在网上看到的唯一讨论与传递给AlertDialog.Builder()的上下文有关。我见过的每个所谓的工作示例都使用Activity的“this”成员作为参数,这就是我正在使用的。