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


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

  • 2016년 10월 04일에 작성됨
    대학생입니다.

조회수 101


1 답변


좋아요
1
싫어요
채택취소하기

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

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

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

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


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close