我在创建自定义对话框时遇到问题。但我没有发现失败。希望任何人都可以帮助我...
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)答案 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指的是活动。希望这有帮助