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

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an appli

2014-11-01 16:00 357 查看
不久前,用AlertDialog控件实现一些功能时,遇到了WindowManager$BadTokenException的错误,查了一些资料终于解决了这问题,与大家共享下我的理解.我编写了一个测试代码,不多说代码如下:

布局文件很简单就一个button,就不给布局代码了。主代码如下:

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

Button alert_Button;
Context mContext;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
alert_Button = (Button) findViewById(R.id.button1);
alert_Button.setOnClickListener(this);
mContext = getApplicationContext();

}

@Override
public void onClick(View arg0) {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setIcon(R.drawable.ic_launcher).setTitle("测试...")
.setMessage("测试提示框的实现");
builder.setPositiveButton("yes", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub

}
}).setNegativeButton("no", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub

}
});
builder.create().show();

}
} 其实这个错误很简单,就是我在实例化AlertDialog.Builder时,用了mContext.而mContext=getApplicationContext.
getApplicationContext返回的是应用的上下文对象.而不是Activity对象。因此只要改成this即可。

getApplicationContext方法生命周期是整个应用,与应用共生共死。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐