2011-01-26 2 views
1

친구들과 함께 하루 종일 검색하고 공부했습니다. 대화 상자가 열려있을 때뿐만 아니라 회 전자가 열렸을 때도 응용 프로그램이 충돌합니다 (그리고 나는 그것이 우연히 만난 다른 시나리오의 무리 일 것이라고 확신합니다).알림 대화 상자가 열려 있고 휴대 전화 (에뮬레이터)의 방향이 바뀌면 앱이 다운됩니다.

onRetainNonConfigurationInstance()와 onConfigurationChanged (Configuration newConfig) 중 하나를 선택하면 도움이되지 않습니다. (어쩌면 내가 틀렸어) - 실제로 나는 첫 번째 것을 선호합니다.

하지만 질문하고 싶습니다. 하나의 열린 대화 상자 또는 열린 회 전자에 대해 처음부터 모든 것을 만들어야합니까? 이게 방법인가요? 어쩌면 사용자가 방향을 바꿀 수있는 시간대에 많은 위젯을 가진 큰 클래스를 다시 초기화하는 것은 가치가없는 경우가 있습니다.

plz 나에게 힌트와 안내를 해주세요. 미리 감사드립니다.

편집 :::

Error code: 

01-25 17:56:48.182: ERROR/WindowManager(312): Activity XXX has leaked window [email protected] that was originally added here 
01-25 17:56:48.182: ERROR/WindowManager(312): android.view.WindowLeaked: Activity XXX has leaked window [email protected] that 
was originally added here 
01-25 17:56:48.182: ERROR/WindowManager(312):  at android.view.ViewRoot.<init>(ViewRoot.java:247) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at android.view.Window$LocalWindowManager.addView(Window.java:424) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at android.app.Dialog.show(Dialog.java:241) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at XXX.menuGroupDialog(XXX.java:946) 
0 1-25 17:56:48.182: ERROR/WindowManager(312):  at XXX.onOptionsItemSelected 
(GroupManagement.java:257) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at android.app.Activity.onMenuItemSelected(Activity.java:2195)01-25 17:56:48.182: ERROR/WindowManager(312):  at 
com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:730) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855) 
01-25 17:56:48.182: 
ERROR/WindowManager(312):  at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at android.view.View$PerformClick.run(View.java:8816) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at 
android.os.Handler.handleCallback(Handler.java:587) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at android.os.Handler.dispatchMessage(Handler.java:92) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at android.os.Looper.loop(Looper.java:123) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at 
android.app.ActivityThread.main(ActivityThread.java:4627) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at java.lang.reflect.Method.invoke(Method.java:521) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
01-25 17:56:48.182: ERROR/WindowManager(312):  at 
dalvik.system.NativeStart.main(Native Method) 

나는이() 함수를 기각 호출하는 것을 알고있다. 대화 상자를 열었을 때 방향 변경을 어떻게 처리 할 수 ​​있습니까?

+0

후 오류 메시지하시기 바랍니다 – WarrenFaith

+0

코드하십시오 !!!!! – the100rabh

답변

5

AyncTask에 progressDialog.show()progressbarDialog.dismiss()을 사용하고 있습니까?

예인 경우 showDialog(id)dismissDialog(id)을 AyncTask 대신 사용하십시오. 로딩 대화 상자를 표시하려면 onCreateDialog()에 사용자 정의 대화 상자를 작성해야합니다. showDialog 및 dismissDialog 메서드는 활동 수준 메서드입니다. 나는 그것들이 Activity 나 Context에서 호출된다는 의미입니다. 따라서 오리엔테이션 변경 후 활동이 다시 작성 되더라도 최신 컨텍스트가 대화 상자에서 사용 가능하게됩니다.

견본 코드 here. 귀하의 요구 사항에 따라 DIALOG_PROGRESS 케이스를 수정하십시오.

또한 onRetainNonConfigurationInstance()은 방향 변경시 완벽하게 작동합니다. 창문 누설 문제로 인해 볼 수 없습니다.

+0

고마워요,이 사람이 정확히 내가 본 것입니다.실제로 나는 잘못된 곳에서 대화 상자 (내 경우에는 AlertDialog)를 만들고 잘못된 위치에 다시 표시했습니다. 모든 것은 지금 올바르게 작동하고 있습니다.하지만 dismissDialog (id)를 사용하여 대화 상자를 닫지 않았습니다. 간단한 dialog.dismiss()를 사용했습니다. 괜찮습니까? 아니면 ...? –

+0

dialog.dismiss()가 나를 위해 윈도우 누출 문제를 일으켰습니다. 그래서 나는 그것이 효과가 없을 것이라고 생각합니다. – MegaMind

+0

예, dismissDialog (id)로 변경했습니다. 실제로 대화 상자가 showDialog (id)에 의해 호출 될 때마다 dismissDialog (id)에 의해 닫혀 야합니다. –

1

오리 엔테이션이 변경되면 기본적으로 활동이 파괴되고 다시 생성됩니다. 이 설정을 해제하고 configChanges 속성을 설정하여이 구성 변경을 직접 처리 할 수 ​​있습니다.

1

할 수 있습니다 중 하나를 사용하지 않도록 구성 변경, 그것은 당신이 당신의 매니페스트 파일에서 XML을 사용하여 전화 변화의 방향 번 다시 그리려고 노력에서 응용 프로그램을 중지 할 수 있습니다, 말을하는 것입니다 :

<activity android:name=".Main" 
android:label="@string/app_name" 
android:screenOrientation="portrait" 
android:configChanges="orientation|keyboardHidden"> 

때 방향을 휴대 전화가 변경되면 기본적으로 Android에서 페이지를 다시 인스턴스화합니다.

+0

다른 레이아웃이없는 경우 완벽한 솔루션이 될 것입니다. 하지만이 활동에는 2 가지 레이아웃이 있습니다. –

0

나는 매우 비슷한 문제가있어서, 나는 manifest actitr의 변화가 거의 없다. 안드로이드 :에서 configChanges = "오리엔테이션" 사람 : 안드로이드 : configChanges = "keyboardHidden | 오리엔테이션"

는 여기를 참조하십시오 Spinner drop-down list and screen orientation change problem

관련 문제