AlertDialog.Builder发生:android.view.WindowManager$BadTokenException: Unable to add window

文章详细介绍了在Android应用开发中遇到的窗口管理问题,即在从一个活动跳转到另一个活动并按下返回键后,当前活动无法接收窗口事件的情况。通过在目标活动中捕获返回键事件并强制退出程序(System.exit(0)),成功解决了此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   

      写一个程序遇见如下异常:

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

        提示在创建AlertDialog.Builder是发生异常,大概意思就是说该AlertDialog 不能添加到窗口。
      活动A跳转到活动B,在B中创建的AlertDialog
      如果再由B跳转到A,如果在B中调用finish(),正常运行
      而如果是在B中,按返回键,到A中,在启动活动B,这个时候便出现异常。

最后的解决方案


	public boolean onKeyDown(int keyCode, KeyEvent event) {
		  if(keyCode == KeyEvent.KEYCODE_BACK){
//			  MyLink.this.finish();
			  System.exit(0);
		  }
		  return true;
	}

在活动B中捕获 点击返回键 事件 ,并强行调用 System.exit(0).


01-01 00:16:20.586 20968 20968 E AndroidRuntime: FATAL EXCEPTION: main 01-01 00:16:20.586 20968 20968 E AndroidRuntime: Process: com.adayo.service.atsmode, PID: 20968 01-01 00:16:20.586 20968 20968 E AndroidRuntime: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at android.view.ViewRootImpl.setView(ViewRootImpl.java:1071) 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:409) 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:109) 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at android.app.Dialog.show(Dialog.java:340) 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at android.app.AlertDialog$Builder.show(AlertDialog.java:1131) 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at android.widget.VideoView$5.onError(VideoView.java:615) 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3446) 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106) 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at android.os.Looper.loop(Looper.java:223) 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7687) 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 01-01 00:16:20.586 20968 20968 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 01-01 00:16:21.454 20968 20968 I Process : Sending signal. PID: 20968 SIG: 9
最新发布
08-06
代码如下:package com.example.myapplication; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import java.util.Date; import java.util.List; public class MyBaseAdapter extends BaseAdapter { private String[] data;//需要好几个东西,比如图像,标题之类话用自定义类型List<Animal> private Context mContext; public MyBaseAdapter(Context mContext, String[] data) { super(); this.mContext = mContext; this.data = data; } @Override public int getCount() {//格子数量 return data.length; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(mContext); View view = inflater.inflate(R.layout.itemlist,null); TextView textView = (TextView) view.findViewById(R.id.textView1); Button button = (Button) view.findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle("详情"); builder.setMessage("你点击了: " + data[position]); builder.setPositiveButton("确定", null); builder.show(); } }); textView.setText(data[position]); return view; } }
07-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值