ActivityGroup加载子Activity中含有弹出框出错问题

问题描述:

Android利用ActivityGroup加载子Activity,子Activity中含有WebView控件,在点击WebView中的select下拉框时报错(如果子Activity含有AlertDialog时也会报错):ERROR/AndroidRuntime(450): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@45053260 is not valid; is your activity running?


主要原因:

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


解决方案:

方式一:AlertDialog.Builder(xxx.this) => AlertDialog.Builder(this.getParent()) 

             缺点:只能修改AlertDialog报错的情况,对于在WebView中的弹出框报错还是无法解决

方式二:在你的activity的onCreate() 方法中,替换setContentView(R.layout.XXXXX)为下面代码:

              View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.xxxx, null);

              this.setContentView(viewToLoad);

             通过调用当前context的parent获得正确的context,再去初始化ContentView,这样就可以比较完美的解决badTokenExcaption相关的问题了。

           (转自:http://wlkc.gtxy.cn/android/List.asp?ID=16)


评价:方式二堪称完美

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值