프레그먼트에 onStart가 한번만 호출됩니다

조회수 1565회

처음에 3개 있던 프레그먼트를 2개로 줄였습니다 그때부터 프레그먼트에 onStart가 앱이 켜질 때 한번만 실행됩니다 프레그먼트 3개일 때는 프레그먼트 이동 시 계속 잘 호출이 됐었는데요 ㅠㅠ 왜 그런걸까요?ㅜㅜ

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 올려주신 정보가 부족합니다만 만일 뷰페이저를 사용 중이고, 이 때 어댑터에서 아이템 개수를 세개에서 두개로 줄인거라면 해당 현상이 발생할 수 있습니다. 아이템 개수가 세개(=프래그먼트가 세개)일 때는 0번째 인덱스에서 2번째 인덱스로 이동할 때, 0번째 인덱스의 프래그먼트가 삭제됩니다. 다시 2번째 인덱스에서 1번째 인덱스로 이동할 때 0번째 인덱스의 프래그먼트가 생성되고요.

    즉, 뷰페이저 이동 시 프래그먼트 생성과 삭제를 반복하기 때문에 onStart()가 호출되는 것인데요. 프래그먼트가 두개일 때는 내부적으로 삭제를 하지 않습니다. 따라서 onStart()가 한번만 호출된다고 볼 수 있고요. 이는 순전히 뷰페이저의 내부적인 동작때문에 발생하는 현상입니다. 뷰페이저의 setOffscreenPageLimit() 아래 함수를 통해서 좌, 우에 유지할 페이지 수를 조절할 수 있습니다. (디폴트 개수는 1입니다.)

    결론은 뷰페이저를 사용중이라면 프래그먼트의 onStart()가 페이지 이동 시 매번 발생한다고 가정한 상태에서 코드를 작성하면 안됩니다.

    아래 링크에서 ViewPager – How Does it Work 부분의 그림을 참고하시면 뷰페이저가 내부적으로 페이지를 어떻게 관리하는지에 대한 힌트를 얻을 수 있습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)