마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

fragment에서 갤러리로 이동시 IllegalStateException 에러

0 추천

개발 시작한지 얼마안된 초보 개발자입니다

현재 제가 개발하는 앱이 있는데 커스텀 탭을 여러개 만들어서 용도대로 나누어서 개발하는 중인데

이미지를 api를 통해 post를 해야 할 일이 생겨서 일단 갤러리에서 사진을 받아오자 라는 생각에 

fragment에서 권한을 준 다음

public void goToAlbum() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(MediaStore.Images.Media.CONTENT_TYPE);
    startActivityForResult(intent,PICK_FROM_ALBUM);
}

이런 식으로 앨범을 열었습니다만 앨범은 잘열리는데 동시에 앱은 종료가 되면서

 

2019-09-24 12:27:42.185 10361-10361/com.example.loginproject E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.loginproject, PID: 10361
    java.lang.IllegalStateException: Failure saving state: active TabFragment2{35cc415} has cleared index: -1
        at androidx.fragment.app.FragmentManagerImpl.saveAllState(FragmentManager.java:3016)
        at androidx.fragment.app.FragmentController.saveAllState(FragmentController.java:134)
        at androidx.fragment.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:591)
        at androidx.appcompat.app.AppCompatActivity.onSaveInstanceState(AppCompatActivity.java:510)
        at android.app.Activity.performSaveInstanceState(Activity.java:1496)
        at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1386)
        at android.app.ActivityThread.callCallActivityOnSaveInstanceState(ActivityThread.java:4721)
        at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:4025)
        at android.app.ActivityThread.handleStopActivity(ActivityThread.java:4084)
        at android.app.ActivityThread.-wrap24(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1622)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

 

이런 식으로 오류가 나더군요

구글링을 해보니 주로 AsyncTask를 사용하는 fragment가 재생성되면서 충돌한다 

재생성을 막기위해 

setRetainInstance(true);

이거를 onCreateView나 onCreate 안에 넣으면 해결된다 이런말도 있어서 썼다 지웠다 하면서 여러가지 시도해봤는데 안되네요..

 

어떻게 해결해야 할까요

 

 

termslife (120 포인트) 님이 2019년 9월 24일 질문
저 프래그먼트를 호출하는 코드도 같이 올려주세요.
...감사합니다. 혹시나해서 프래그먼트를 호출하는 코드로 가봤는데 역시나... 이전에 테스트를 위해 프래그먼트중 하나를 detach,attach후 커밋을 다시 해줬던 코드가 남아있네요 감사합니다....

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...