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也对应的销毁。
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也对应的销毁。
相关文章推荐
- Android应用多渠道打包脚本
- 浅析Android M新功能Adoptable Storage Devices(适配的存储设备)
- Android studio 启动不检查SDK
- Android SlidingMenu 滑出侧边栏
- Android性能调试工具使用
- Android ListView 卡顿分析
- netty4 Android和服务器进行通信
- Android如何设置TextView的行间距、行高
- Android-Universal-Image-Loader不同路径加载图片方式
- Android手势判断
- Android使用Put方式提交数据
- Android系统中Parcelable和Serializable的区别
- android,结合Timer和TimerTask实现定时任务
- Android使用枚举单例实现Toast快速刷新
- android 4.4 状态栏隐藏
- android中代码混淆
- Android studio报错 Error retrieving parent for item: No resource found that matches the given name ...
- android
- android ViewPager滑动事件讲解
- 【Android】解决在Android虚拟机中安装apk报error:protocol faultno status或error:device not found问题