本文主要是介绍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)
评价:方式二堪称完美
这篇关于ActivityGroup加载子Activity中含有弹出框出错问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!