您的位置:首页 > 移动开发 > Android开发

AlertDialog-----android.view.WindowManager$BadTokenException: Unable to add window

2015-09-30 15:09 363 查看
今天用到AlertDialog执行时,报android.view.WindowManager$BadTokenException: Unable to add window的错误

AlertDialog.Builder builder=new AlertDialog.Builder(getApplicationContext());
builder.setTitle("您没有登录,登录后才能发布委托消息,是否登录");
builder.setPositiveButton("登录", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent intent=new Intent(getApplicationContext(), DengluActivity.class);
startActivity(intent);
finish();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
return;
}
});
builder.create().show();

检查以上代码感觉没有错误,不知道问题出现在哪里,查阅资料发现getApplicationContext()和this是有区别的
将代码改为AlertDialog.Builder builder=new AlertDialog.Builder(ResActivity.this);
builder.setTitle("您没有登录,登录后才能发布委托消息,是否登录");
builder.setPositiveButton("登录", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent intent=new Intent(getApplicationContext(), DengluActivity.class);
startActivity(intent);
finish();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
return;
}
});
builder.create().show();问题解决
原因在于getApplicationContext()指的是整个应用的context,他的生命周期既是整个应用的生命周期;而Activity.this指的是当前activity的context,他的生命周期是activity的生命周期。

由于Dialog依赖于View,也就是activity中的view。当activity销毁后,Dialog也对应的销毁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: