11

내 응용 프로그램에서 3 조각으로 활동하고 있습니다. 버튼을 첫 번째 버튼에 푸시하면 액티비티에서 관련없는 물건을 호출하는 메서드가 호출되고 finish()이 호출됩니다.안드로이드 - 종료 후 활동을 파괴 할 수 없습니다. IllegalStateException : onSaveInstanceState 이후에이 작업을 수행 할 수 없습니다.

이렇게하면 조각에 onPause()이 나타나 더 관련없는 물건을 처리 한 다음 super.onPause()을 호출합니다.

이 애플리케이션은 다음이 (논리적 뷰 스택을 다음)에 제공된 기존 활동을로드, 갑자기 onDestroyView()이 조각에 호출되는 다음과 같은 예외와 충돌 :

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to destroy activity {be.niteowl.niteowl.debug/be.niteowl.niteowl.views.activities.VenueActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2793) 
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2811) 
at android.app.ActivityThread.access$2100(ActivityThread.java:123) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:972) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3835) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1327) 
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1338) 
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) 
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) 
at be.niteowl.niteowl.views.activities.TrackFragment.onDestroyView(TrackFragment.java:161) 
at android.support.v4.app.Fragment.performDestroyView(Fragment.java:1665) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:980) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070) 
at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1898) 
at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:324) 
at com.actionbarsherlock.app.SherlockFragmentActivity.onDestroy(SherlockFragmentActivity.java:88) 
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2780) 
... 11 more 

오류가 때 발생하는 것 같습니다 메인 조각에서 MapFragment을 제거하려고합니다. 나는 파편 안에 단편을 가지고 있지 않아야한다는 것을 알고 있지만, 과거에는 코드가 작동 했었고 어쨌든 그 주위에 방법이 없습니다.

@Override 
public void onDestroyView() { 
    SupportMapFragment f = (SupportMapFragment) activity.getSupportFragmentManager().findFragmentById(R.id.fragment_map); 
    if (f != null) { 
     activity.getSupportFragmentManager().beginTransaction().remove(f).commit(); 
    } 
    super.onDestroyView(); 
} 

나는 아직 (특히 getting exception "IllegalStateException: Can not perform this action after onSaveInstanceState") 여기에 수정을 위해 주위를 둘러 보았다,하지만 그들 중 누구도 내 현재의 문제에 적용 할 수 없었다.

+0

저장된 인스턴스가 실행되기 전에 실제로 실행되도록 설정 했습니까? – Broak

답변

7

활동이 파괴 되었기 때문에 조각이 자동으로 삭제됩니다. 따라서 제거 할 필요가 없습니다. onDestroyView() 메소드를 삭제하십시오.

조각 안에 조각이 있어야한다고는하지만 이전에는 코드가 작동했기 때문에 어쨌든 주위에 코드가 없습니다.

먼저 조각 내 조각은 Android 지원 패키지의 조각 및 기본 Android 4.2+ 조각의 백엔드를 통해 지원됩니다.

둘째, 여기에 표시된 코드를 기반으로하지 않고 조각 내에서 조각을 수행하지 않습니다. 어떤 이유로 든 귀하의 TrackFragment이 작업에 해당 작업을 위임하기보다는 다른 최상위 조각 (SupportMapFragment)을 관리하고 있습니다.

+0

고마워, 그건 실제로 다소 수정 된 것이었다. 그러나 이제는 세 번째 탭으로 이동 한 다음 돌아갈 때 문제가 발생합니다. 치명적인 예외 : 주 android.view.InflateException : 이진 XML 파일 줄 # 96 : android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:587)에서 클래스 조각 을 (를) 확장하는 중 오류가 발생했습니다. ... (이 주석이 너무 길음) – Vindicator

+0

@Vindicator : 아마도 새 StackOverflow 질문 열기 여기서 전체 스택 추적과 관련 XML 및 Java 코드를 표시 할 수 있습니다. – CommonsWare

+0

@Vindicator이 문제를 해결하는 것 같습니다 : http://stackoverflow.com/a/17422251/732489 – Quentin

15

다음 코드는 저에게 효과적입니다. 그것은 OnPostResume() 콜백 나를 위해 문제를 해결에지도 조각을

@Override 
public void onDestroy() { 

    SupportMapFragment f = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.mapView); 
    if (f.isResumed()){ 
     getFragmentManager().beginTransaction().remove(f).commit(); 
    } 

    super.onDestroy(); 
} 
+0

감사합니다 남자, 충돌 때 응용 프로그램을 닫고 코드를 수정하려고했다. –

+2

f.isResumed() 나를 위해 일했다, 난 그냥 f! = null을 사용했다 (내 생각은 귀하의 코드뿐만 아니라있을 것 같아요), 정말 고마워! 마침내 – Analizer

+0

! 나도 그랬어! – lisa

0

을 다음 덕분에, .commit는() 처리 할 수 ​​없습니다.

getSupportFragmentManager(). beginTransaction(). remove(). commit()를 제거하십시오.

내 응용 프로그램에 대해 수행 한 onBackPressed() 처리를 시도하십시오.

관련 문제