안드로이드에서 DialogFragment를 사용할 때 연속으로 특정 DialogFragment를 show하게 될 때 발생하게 되는 오류
java.lang.IllegalStateException: Fragment already added: DialogFragment
FATAL EXCEPTION: main
Process: com.example.loan, PID: 24169
java.lang.IllegalStateException: Fragment already added: FormFragment{428f10c8 #1 id=0x7f050055 form}
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1192)
at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:722)
at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1533)
at android.support.v4.app.FragmentManagerImpl$2.run(FragmentManager.java:489)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:450)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5068)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
DialogFragment 를 show를 여러번 해주게 되면 이미 추가된 Fragment인데 한번더 추가를 하게되어 해당 오류가 발생하게 된다.
dialogFragment.show(supportFragmentManager, TAG)
위의 오류 해결에는 두가지 방법이 있는데
1. 해당 DialogFragment가 추가되지 않았을 경우에만 show를 실행시켜준다.
if(!dialogFragment.isAdded) {
dialogFragment.show(supportFragmentManager, TAG)
}
2. DialogFragment가 show 되는 부분(버튼이 클릭되는 부분)을 일정시간 간격을 두고 발생시키면 된다.
'모바일 프로그래밍 > 안드로이드' 카테고리의 다른 글
Doze 모드란? Doze 모드 앱과 상호작용 최적화 (0) | 2019.08.02 |
---|---|
DialogFragment 에서 초기화 지연(by lazy) 사용 시 발생한 버그 (0) | 2019.06.17 |
RecyclerView의 scrollToPosition나 smoothScrollToPosition 사용 시 Item사이의 margin이 있는 경우 (0) | 2019.05.10 |
코틀린 접근 제한자 (Visibility Modifiers): private, protected, internal, public (0) | 2019.04.19 |
Dagger2에서 발생하는 java.lang.IllegalArgumentException: No injector factory bound for Class 에러 (0) | 2019.04.18 |