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中含有弹出框出错问题)