android.view.ViewRoot$W@47e0add0 is not valid; is your activity running?错误分析

本文解决了一个常见的Android开发问题,即在子Activity中使用PopupWindow时遇到的 WindowManager$BadTokenException错误。通过将setContentView方法的参数从this改为getParent(),可以避免该错误。文章提供了详细的分析和解决方案,帮助开发者理解和解决此类问题。

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

 出错信息:
 
android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRoot$W@47e0add0 is not valid; is your activity running?at android.view.ViewRoot.setView(ViewRoot.java:505)at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)at android.view.Window$LocalWindowManager.addView(Window.java:424)at android.widget.PopupWindow.invokePopup(PopupWindow.java:828)at android.widget.PopupWindow.showAtLocation(PopupWindow.java:688)at android.widget.CursorHandle.showCursorHandle(CursorHandle.java:295)at android.widget.CursorHandle$CheckCursorHandle$1.run(CursorHandle.java:691)at android.os.Handler.handleCallback(Handler.java:587)at android.os.Handler.dispatchMessage(Handler.java:92)at android.os.Looper.loop(Looper.java:123)at android.app.ActivityThread.main(ActivityThread.java:4627)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:521)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)at dalvik.system.NativeStart.main(Native Method)

 

设备分布:

操作系统分布:

 

 

 

原因分析:

因为new对话框的时候,参数content 指定成了this,即指向当前子Activity的content。但子Activity是动态创建的,不能保证一直存在。其父Activity的content是稳定存在的,所以有下面的解决办法。

将子Activity中的

  setContentView(R.layout.m_result);

改为:  View contentView = LayoutInflater.from(getParent()).inflate(R.layout.m_result, null);   setContentView(contentView);

 

其中:R.layout.m_result为布局文件

 

 

参考:http://blog.youkuaiyun.com/biangren/article/details/7514722

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值