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

프래그먼트3개를 가진 탭레이아웃입니다.

0 추천
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOffscreenPageLimit(1);

TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
tabLayout.getTabAt(0).setIcon(tabIcons[0]);
tabLayout.getTabAt(1).setIcon(tabIcons[1]);
tabLayout.getTabAt(2).setIcon(tabIcons[2]);
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

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

        @Override
        public Fragment getItem(int position) {

            switch (position) {
                case 0:
                    return new Fragment_tab1();
                case 1:
                    return new Fragment_tab2();
                case 2:
                    return new Fragment_tab3();
                default:
                    return null;
            }
        }

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

        @Override
        public CharSequence getPageTitle(int position) {
            return null;
        }
    }

3개의 탭 프래그먼트를 가진 레이아웃입니다.

근데 도저히 해결이 안되는건...

각각의 탭으로 스와이프 할 경우 각각의 프래그먼트 레이아웃은 잘 나옵니다..(아래소스 참조)

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        Log.d(this.getClass().getSimpleName(), "tab2 onCreateView()");

        return inflater.inflate(R.layout.fragment_fragment_tab2, container, false);
    }

그런데 문제는...

현재 화면에 보이는 탭에 대한 로그가 전혀 찍히질 않습니다..

특히나 탭2는 맨 처음 실행시에만 보이고,,,,

탭3까지 스와이핑 후 다시 탭2로 스와이핑해도 로그가 전혀 찍히질 않습니다.

또한 화면은 탭2인데 로그는 탭3에 대한 로그가 찍히기도 합니다.

1달째 해결못하고 있어요,,꼭 좀 도와주시면 정말 감사드리겠습니다.

@Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        Log.d(this.getClass().getSimpleName(), "tab2 onViewCreated()");
        super.onViewCreated(view, savedInstanceState);
 
        .......
}

 

 

 

 

 

 

 

 

 

앤드류이드 (6,190 포인트) 님이 2016년 9월 19일 질문
그게 정상적인 동작입니다. 이유는 페이지어댑터가 처음에 앞뒤로 필요한 탭을 생성해서 캐슁을 하기 때문입니다.
그러면 제가 원하는대로 나올려면 어떻게 해야하나요?
 각 탭별로 블루투스 통신을 해서 값을 뿌려야는데...
소스 호출이 안되니 이거 답이 없네요 ㅠㅠ

1개의 답변

0 추천
 
채택된 답변
ViewPager에 OnPageChangeListener 이벤트를 줄수가 있습니다.

여기 함수들 중 onPageSelected 함수가 원하시는 페이지 선택되었을때의 이벤트를 페이지 position파라미터와 함께 내려주도록 되어 있지요.

특정 페이지가 되었을때 해당 fragment를 조작시키는 방식으로 접근하면 될것 같습니다.
Development Guy (70,570 포인트) 님이 2016년 9월 19일 답변
앤드류이드님이 2016년 9월 20일 채택됨
답변 감사드립니다. 공부해보다가 안되는거 있으면 질문 드리겠습니다~
...