본문으로 바로가기

안드로이드에서 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 되는 부분(버튼이 클릭되는 부분)을 일정시간 간격을 두고 발생시키면 된다.