티스토리 뷰
첫번째.
DialogFramgment 를 사용할때 setRetainInstance(true) 를 적용하여 사용하면
orientation 변경등 configuration 이 변경되어 activity 가 재생성이 되었을때 DialogFramgent 가 다시 나타나지 않고 사라지는 문제가 있다.
이는 아래와 같은 workaround 로 해결 가능하다.
@Override
public void onDestroyView(){
if (getDialog() != null && getRetainInstance()) {
getDialog().setDismissMessage(null);
}
super.onDestroyView();
}
두번째.
DialogFragment 가 화면상에 떠있는동안 home 을 눌러 화면에서 사라지게 한다.
그런 상태에서 DialogFragment 의 dismiss 가 호출되면 다음과 같은 에러가 발생한다.
화면에서 사라지면서 onSaveInstanceSate가 호출된 상태에서 resume 되지 않고 dismiss를 하면 발생하게 된다.
E/AndroidRuntime(19229): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
E/AndroidRuntime(19229): at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1323)
E/AndroidRuntime(19229): at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1341)
E/AndroidRuntime(19229): at android.app.BackStackRecord.commitInternal(BackStackRecord.java:597)
E/AndroidRuntime(19229): at android.app.BackStackRecord.commit(BackStackRecord.java:575)
E/AndroidRuntime(19229): at android.app.DialogFragment.dismissInternal(DialogFragment.java:292)
E/AndroidRuntime(19229): at android.app.DialogFragment.dismiss(DialogFragment.java:258)
이 경우에는
dismiss를 호출하지 않고
dismissAllowingStateLoss() 로 종료해주면 된다.
개인적으로 dismissAllowingStateLoss() 를 사용하고 싶지 않은데
dismiss는 어차피 명시적으로 호출해 주는 것이고 확실히 종료시킨다는 의미이므로 써도 상관없을것 같다.
그런데 commit() 도 마찬가지 인데 이에 대한 처리는 좀 신중해야 할것으로 보인다.
참고 : http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html
- Total
- Today
- Yesterday
- 락
- Java
- 인디
- 일어일기
- Linux
- 서울숲별밤축제
- 영화
- 여행
- 도쿄
- Mac
- 잡담
- 일본
- 야마다 타카유키
- android
- 일기
- 신주쿠
- 진해
- 노래
- 음악
- 포스트크로싱
- 공연
- 안드로이드
- 사진
- 에픽하이
- epik high
- 드라마
- 코이데 케이스케
- 아사가야
- 책
- postcrossing
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |