创建自定义对话框时出错

时间:2010-12-30 19:33:03

标签: android dialog

我在创建自定义对话框时遇到问题。但我没有发现失败。希望任何人都可以帮助我...

protected Dialog onCreateDialog(int id) {
    Dialog dialog = null;
    switch (id) {
    case DIALOG_ABOUT_ID:
        dialog = buildAboutDialog();
        break;
    default:
        dialog = null;
    }
    return dialog;
}

...

public Dialog buildAboutDialog() {
    Context mContext = getApplicationContext();
    Dialog dialog = new Dialog(mContext);

    dialog.setContentView(R.layout.about_dialog);
    dialog.setTitle("About this application");

    return dialog;
}

导致以下错误:

12-30 19:27:02.593: ERROR/AndroidRuntime(383): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

我检查了返回的对话框是否== null - 但它不是。

我还尝试了http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog

中描述的第二种方式(inflater)

3 个答案:

答案 0 :(得分:3)

我发现,需要使用

创建对话框
Dialog dialog = new Dialog(this);

而不是

Context mContext = getApplicationContext();
Dialog dialog = new Dialog(mContext);

我不知道为什么。也许有人可以向我解释一下吗?

答案 1 :(得分:1)

Dialog dialog = new Dialog(contex); dialog.setContentView(R.layout.help_content);

这对我有用..可能是getapplicationcontext没有获得你的主类的上下文。

答案 2 :(得分:0)

事实证明,活动的上下文与getApplicationContext()返回的对象不同。您可以使用日志记录进行检查,只输出ActivityName.this和getApplicationContext。

getApplicationContext返回的对象是全局的,而活动的上下文只属于该活动。

Log.e(tag,""+ getApplicationContext());
Log.e(tag,""+CustomDialogActivity.this);

其中CustomDialogActivity是我想要显示对话框的活动。

对话框需要活动的上下文,而getApplicationContext()不提供。写成here(读取注释)活动的上下文是getApplicationContext()的超集。所以总是传递一个活动的上下文而不是全局上下文是一件好事。

如果你在onClick()里面你可以使用,也可以回答ffleandro对这个页面的评论 ActivityName.this指的是活动。希望这有帮助