今天在写程序中遇到以下问题,如此怪异,在网上找了不少,终于解决了问题: java
java.lang.IllegalArgumentException: View not attached to window manager android
解决方法: spa
在调用系统相机拍照相片后返回protected void onActivityResult(int requestCode, int resultCode, Intent data)方法,那么可能会抛出这个异常,缘由就是返回activity后,从新运行onCreate方法,那些view从新画出来,某些须要初始化的变量没有设置好。处理这个问题,只要有两种方法:(关键第二点)
1. 限制屏幕翻转
可在AndroidManifest.xml中设定android:screenOrientation=”portrait”
2. 若是是须要翻转的,那么限制那些view作重画动做。
可在AndroidManifest.xml中设定 code
android:configChanges=”orientation|keyboardHidden|navigation” xml
在Dialog转圈圈的过程当中,若是手机屏幕方向改变,那么可能会抛出这个异常,缘由就是屏幕翻转后那些view从新画出来,dialog在执行dismiss()的时候, get
private void lockScreen(){ Configuration newConfig = getResources().getConfiguration(); if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){ //横屏 U.dout("ORIENTATION_LANDSCAPE lock it!"); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ //竖屏 U.dout("SCREEN_ORIENTATION_PORTRAIT lock it!"); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else if(newConfig.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_NO){ //键盘没关闭。屏幕方向为横屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }else if(newConfig.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_YES){ //键盘关闭。屏幕方向为竖屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } private void unlockScreen(){ U.dout("unlock!"); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); }