View not attached to window manager

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

    找不到原來的位置了。那麼要處理這個問題,最簡單的幾種方法是:
    1. 限制屏幕翻轉
        可在AndroidManifest.xml中設定android:screenOrientation=」portrait」
    2. 若是是須要翻轉的,那麼限制那些view作重畫動做。
        可在AndroidManifest.xml中設定
            android:configChanges=」orientation|keyboardHidden|navigation」
    3.  若是你又要翻轉,又要重畫view,那你就用代碼去控制
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);
	}
相關文章
相關標籤/搜索