마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

VIewPager 안 ViewPager의 Adapter에서 getItem가 호출이 안되는 문제.

0 추천

안녕하세요. 개발간 당연히 될것 같은부분이 안되어서 질문드립니다....

 

구조상 한개의 ViewPager로 2개의 동일한 페이지를 보여주고 상단 탭으로 전환하며, 보여지는 페이지에도 VIewPager가 존재하여 여러 페이지들을 보여주고 있습니다. 

코딩 후 실제화면을 확인해보니 첫번째 탭 페이지는 정상이나 두번째 페이지에는 ViewPager 부분이 없는 현상이 발견되었습니다...

이유를 찾는 중 두번째 페이지에서의 FragmentPagerAdapter에서 getItem이 호출이 안되는걸 확인했습니다..

무슨 이유때문에 이러한 현상이 발생하는 것인지 알고 싶어 질문 남깁니다...

 

코드는 아래와 같습니다...

 

최상단 VIewPager에 들어가는 Fragment

public class TestActivity extends Fragment{

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        LinearLayout layoutView = (LinearLayout) inflater.inflate(R.layout.test_layout,container,false);
        ViewPager viewPager = (ViewPager)layoutView.findViewById(R.id.testPager);
        TestAdapter testAdapter = new TestAdapter(getFragmentManager());
        viewPager.setAdapter(testAdapter);

        return layoutView;
    }
}
 
 
 
포함되어있는 ViewPager
 
public class Test_Fragment extends Fragment{

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        LinearLayout layoutView = (LinearLayout) inflater.inflate(R.layout.test_fragment,container,false);



        return layoutView;
    }
}
 
Adapter는 같은 클래스는 아니나 코드상으로는 동일하여 한개만 남깁니다..
 
public class TestAdapter extends FragmentPagerAdapter {


    private int tabCount = 3;
    private Intent intent;

    public TestAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {

        switch (position){
            case 0:

                return new Test_Fragment();
            case 1:

                return new Test_Fragment();

            case 2:

                return new Test_Fragment();
            default:

                return null;
        }

    }

    @Override
    public int getCount() {
        return tabCount;
    }

    public void setIntent(Intent intent) {
        this.intent = intent;
    }
}
bedz (700 포인트) 님이 2017년 2월 7일 질문

2개의 답변

0 추천
 
채택된 답변
ViewPager 는 처음 Adapter 초기화 할때 페이지가 2개 이상이면 다음 페이지까지 미리 초기화 합니다.

질문자님께서 페이지가 두개라고 하셨는데 그럼 1번째 페이지 로드할때 이미 getItem이 2번째 포지션까지 호출되었을 겁니다.
Development Guy (70,570 포인트) 님이 2017년 2월 8일 답변
bedz님이 2017년 2월 8일 채택됨
해당 말씀하신건 확인한 후였으나 답변남겨주신점 감사드립니다
0 추천
자답입니다. Viewpager안 fragment에서 또 viewpager사용시 fragmentmanager선언이 오류였습니다.

정확한 원인은 모르겠고 두번째 viewpager에서 getchilefragmentmanager로 프레그먼트매니저를 넘겨주니 해결되었습니다.

매니저 관리 미흡이였습니다. 답변달아주신분 채택드렸습니다
bedz (700 포인트) 님이 2017년 2월 8일 답변
...