안드로이드 ViewPager에서 Fragment데이터들을 가지고 있을려면 어떻게 구현해야할까요?


안드로이드 뷰페이저에서 뷰 페이저 특성상 현재 보이는 뷰와 그 다음뷰 그 전에 뷰를 같이 불러 오는데.. 만약 뷰페이저에 프레그먼트가 5개 정도 들어 있다고 가정했을때 현재 프레그먼트가 2번 이었을때 1,3번 프레그먼트를 불러 오는데요.. 근데 프레그먼트 5번으로 갔다가 다시 2번으로 오면 다시 데이터를 불러 오는데 원래 있던 프레그먼트 데이터를 다시 사용할려면 어떻게 해야 하는지 알고 싶습니다..

결론은 프레그먼트에 데이터를 지우지 않고 어디에 저장했다가 다시 불러 오고 싶습니다 어떻게 해야 할까요?

  • 2016년 05월 30일에 작성됨

조회수 613


1 답변


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

프래그먼트가 종료 될 때 상태 값을 저장하고 싶다면 FragmentStatePagerAdapter를 상속받아 adpater를 만드세요. 그런 후 프래그먼트의 onSaveInstanceState를 오버라이드 하면 됩니다. onSaveInstanceState 함수는 프래그먼트가 종료되기 전에 호출되며 파라미터로 전달되는 Bundle에 데이터를 저장하고 프래그먼트가 다시 생성 될 때 onCreate/onCreateView의 Bundle에 저장된 데이터를 꺼낼 수 있습니다.

Fragment (Pseudo-code)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (savedInstanceState != null && savedInstanceState.get("data") != null) {
       // 이전에 저장한 데이터 사용
       ...

    }
    return view;
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    // 데이터 저장
    outState.putInt("data", "XXX");
}

덧붙여 ViewPager의 페이지 수가 고정이고, 스와이프 시 프래그먼트를 메모리에 계속 유지하고 싶다면 ViewPager의 setOffscreenPageLimit(int limit) 함수를 이용해보세요. 프래그먼트의 상태를 유지하는 가장 쉬운 방법입니다.


  • 답변 감사합니다    손진우   2016.5.30 13:31     

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

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