만족
[Android] Can not perform this action after onSaveInstanceState 본문
[Android] Can not perform this action after onSaveInstanceState
FrontEnd/Android Satisfaction 2023. 3. 12. 18:02
Fatal Exception: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at androidx.fragment.app.FragmentManager.checkStateLoss(FragmentManager.java:1844)
at androidx.fragment.app.FragmentManager.enqueueAction(FragmentManager.java:1884)
at androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:329)
at androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:294)
at androidx.fragment.app.DialogFragment.show(DialogFragment.java:260)
fragment transaction commit (dialogFragment show) 한 시점에서 발생하는 오류
onSaveInstanceState() 이후 fragment transaction이 커밋되었을 때 발생한다고 한다
"상태 저장-> 상태 변경-> 상태 복구" 의 절차를 따를 때
저장과 복구 사이에서 발생한 변경은 복구될 때 포함되지 않아 나쁜 사용자 경험을 제공할 수 있어
상태 저장 후 상태 변경이 발생하면 Exception 을 발생시킨다고 한다.
//as-is
getSupportFragmentManager().beginTransaction().add(R.id.my_fragment, new MyFragment())
.commit();
//to-be
getSupportFragmentManager().beginTransaction().add(R.id.my_fragment, new MyFragment())
.commitAllowingStateLoss();
이런 상황에서 "상태 변경"한 것이 "복구될 때 누락되어도 좋다"라고 명시적으로 알려 주기 위해
commit 대신 commitAllowingStateLoss 를 사용하면 된다.
DialogFragment를 사용할 때도 해당 오류가 발생할 수 있는데,
이 때도 다른 방법으로 프래그먼트를 커밋(show)해주면 된다.
'FrontEnd > Android' 카테고리의 다른 글
[Android] android studio JDK 버전 업데이트 how to update jdk version in android studio) (0) | 2023.03.05 |
---|---|
[Android] 전면 광고가 로딩되었음에도 표시되지 않는 현상 (0) | 2023.02.21 |
[Android] Admob 정책 위반 수정: Google 게재 광고를 완전히 또는 부분적으로 가리는 콘텐츠 (0) | 2023.02.13 |
[Android] admob 전면 광고의 적절한 로딩 시점과 표시 시점 (0) | 2022.12.12 |
[Android] 업데이트 제출을 위한 targetSDK 31이상(33) 업데이트와 관련 오류 수정 (0) | 2022.12.12 |
Comments