ViewPager 로 탭버튼 구현중입니다.

조회수 1502회

viewPager 어댑터안에 이런식으로 구현을 했는데

 @Override
    public Fragment getItem(int position) {

        Log.d("test","=====position====" + position);

        switch (position){
            case 0:
                fragement a = new a();
                return a;
            case 1:
                fragment b = new b();
                return bt;
            case 2:
                fragment c = new c();
                return c;
            case 3:
                fragment d = new d();
                return d;
            default:
                return null;
        }

이런식으로 하였는데 viewpager가 처음에 호출될경우 0,1 이렇게 포지션이 잡혀서 getItem안에 포지션은 0 , 1 , 1,2 2,3 이렇게 되서 2번호출시에 3번도 같이 호출이 되는경우가 생깁니다.. onPageSeleten 안에서의 position 값은 선택되는 번호로 1번 누르면 1번 포지션이 잡히는데 .. getItempos는 계속 1,2 이렇게되어버리네요.. 해결 방법 도움 부탁드립니다.

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

1 답변

  • getItem() 함수내에서 1, 2가 한꺼번에 호출되는 것은 ViewPager의 의도된 동작입니다. ViewPager는 현재 화면의 좌, 우 페이지를 한꺼번에 생성합니다.

    이미지

    위 그림처럼 ViewPager는 현재 화면인 2번 페이지 뿐만 아니라 좌,우에 있는 1, 3번 페이지도 미리 생성합니다. 1, 3번 페이지를 off-screen 페이지라고 하고요. off-screen 페이지를 몇개까지 생성할 수 있는지를 조절하고 싶다면 ViewPager.setOffscreenPageLimit(int limit); 함수를 사용하세요.

    관련해서 다음 링크를 읽어보시면 도움이 될 것 같습니다.

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

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

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

(ಠ_ಠ)
(ಠ‿ಠ)