今天在寫程序中遇到以下問題,如此怪異,在網上找了不少,終於解決了問題: 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); }