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

조회수 3452회

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

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

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 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.