AlertDialog 获取上下文的问题

来源:互联网 发布:unity3d网络游戏实战 编辑:程序博客网 时间:2024/06/06 16:55

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


   今天给删除收货地址写AlertDialog的时候 ,无论怎么样 都是 不能Create ,我是把AlertDialog 写在Adapter里面了 而且上下文mContext已经传过来了 ,后来百度了。


  解决办法  在Activity new Adapter 传上下文的时候用 Activity.this 作为上下文 不要用 getApplication()  作为上下文 这样就可以了



  如果你把AlerDialog写在Activity上 也要用 Activity.this 作为上下文。。。。。



AlertDialog.Builder builder = new AlertDialog.Builder(mContext);builder.setTitle("提示信息");builder.setMessage("您确定取删除收货地址吗?");builder.setIcon(R.drawable.ic_launcher);builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {        delAddress(mDatas.get(position).getAddressId());    }});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {    }});Dialog alertDialog = builder.create();alertDialog.show();



http://blog.csdn.net/yimo29/article/details/6004782

在Activity中newSpinner是我把mContext传入,但是出了Android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application这个错误,参考了达人的文章终于搞定。

 

[java] view plain copy
  1. private Context mcontext;  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {mcontext = getApplicationContext();  
  4.         System.out.println("mcontext=" + mcontext);  
  5.     }  

 

[java] view plain copy
  1. new AlertDialog.Builder(mcontext)  
  2.             .setIcon(android.R.drawable.ic_dialog_alert)  
  3.             .setTitle("Warnning")  
  4.             .setMessage(  
  5.                     "You forget to write the message. Do you want to fill out it ??")  
  6.             .setPositiveButton("Yes", positiveListener).setNegativeButton(  
  7.                     "No", negativeListener).create().show();  

 

导致报这个错是在于new AlertDialog.Builder(mcontext),虽然这里的参数是AlertDialog.Builder(Context context)但我们不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。 

 

解决方法:将new AlertDialog.Builder(Context context)中的参数用Activity.this(Activity是你的Activity的名称)来填充就可以正确的创建一个Dialog了。

 

[java] view plain copy
  1. new AlertDialog.Builder(MyActivity.this)  
  2.                 .setIcon(android.R.drawable.ic_dialog_alert)  
  3.                 .setTitle("Warnning")  
  4.                 .setMessage(  
  5.                         "You forget to write the message. Do you want to fill out it ??")  
  6.                 .setPositiveButton("Yes", positiveListener).setNegativeButton(  
  7.                         "No", negativeListener).create().show();  


0 0
原创粉丝点击