`

View not attached to window manager

 
阅读更多

View not attached to window manager

分类: android1873人阅读评论(1)收藏举报

今天在写程序中遇到如下问题,如此怪异,在网上找了很多,终于解决了问题:

java.lang.IllegalArgumentException: View not attached to window manager

解决方法:

在调用系统相机拍照相片后返回protected void onActivityResult(int requestCode, int resultCode, Intent data)方法,那么可能会抛出这个异常,原因就是返回activity后,重新运行onCreate方法,那些view重新画出来,某些需要初始化的变量没有设置好。处理这个问题,只要有两种方法:(关键第二点)
1. 限制屏幕翻转
可在AndroidManifest.xml中设定android:screenOrientation=”portrait”
2. 如果是需要翻转的,那么限制那些view做重画动作。
可在AndroidManifest.xml中设定android:configChanges=”orientation|keyboardHidden|navigation”

 

 

 

在Dialog转圈圈的过程中,如果手机屏幕方向改变,那么可能会抛出这个异常,原因就是屏幕翻转后那些view重新画出来,dialog在执行dismiss()的时候,
找不到原来的位置了。那么要处理这个问题,最简单的几种方法是:
1. 限制屏幕翻转
可在AndroidManifest.xml中设定android:screenOrientation=”portrait”
2. 如果是需要翻转的,那么限制那些view做重画动作。
可在AndroidManifest.xml中设定android:configChanges=”orientation|keyboardHidden|navigation”
3. 如果你又要翻转,又要重画view,那你就用代码去控制

 

 

  1. private void lockScreen(){
  2. Configuration newConfig = getResources().getConfiguration();
  3. if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
  4. //横屏
  5. U.dout("ORIENTATION_LANDSCAPE lock it!");
  6. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  7. }else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
  8. //竖屏
  9. U.dout("SCREEN_ORIENTATION_PORTRAIT lock it!");
  10. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  11. }
  12. else if(newConfig.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_NO){
  13. //键盘没关闭。屏幕方向为横屏
  14. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  15. }else if(newConfig.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_YES){
  16. //键盘关闭。屏幕方向为竖屏
  17. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  18. }
  19. }
  20. private void unlockScreen(){
  21. U.dout("unlock!");
  22. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
  23. }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics