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

onConnect()함수 호출된 뒤에 FragmentPagerAdapter의 getItem()함수를 불러오고 싶어요

0 추천

메인 액티비티에 세개의 프래그먼트가 연결되있습니다. oncreate()에서 생성된 googleMapClient와 LocationRequest의 객체를 나머지 프래그먼트로 전달해줘야 합니다. 그런데 프래그먼트생성이 onconnect보다 먼저 되서 initLocation 객체가 null로 전달됩니다 ㅠㅠㅠㅠㅠㅠ onConnected함수 호출 후 getItem함수가 호출되게 하는 방법 없을까요?

@Override
public void onConnected(Bundle bundle) {
    Location initLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    if ( ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED ) {}
    LocationServices.FusedLocationApi
            .requestLocationUpdates(mGoogleApiClient, mLastLocation, this);

}
 public static class MainPagerAdapter extends FragmentPagerAdapter {
        private FragmentManager fm;

        public MainPagerAdapter(FragmentManager fm) {
            super(fm);
            this.fm = fm;
        }

        @Override
        public Fragment getItem(int position) {
            Fragment fragment = fm.findFragmentByTag("android:switcher:"+viewPager.getId()+":"+getItemId(position));
            LocationParecelInfo info=new LocationParecelInfo(mGoogleApiClient,mLastLocation);
            if(fragment != null)
                return fragment;
            Bundle args;
            args = new Bundle();
            switch (position){
                case 0:
                    args.putSerializable("sights", sights);
                    args.putSerializable("categories", categories);
                    return SightCategory.newInstance(args);
                case 1:
                    args.putParcelable("locationInfo", info);
                    return MyInfoFragment.newInstance(args);
                case 2:
                    args.putSerializable("rentalList", rentalList);
                    args.putSerializable("comfortsList", comfortsList);
                    args.putSerializable("toiletList", toiletList);
                    args.putParcelable("locationInfo", info);
                    return FacilitiesFragment.newInstance(args);

                default:
                    return SightCategory.newInstance(args);
            }
        }

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

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position){
                case 0:
                    return "관광지";
                case 1:
                    return "내 정보";
                case 2:
                    return "편의시설";
                default:
                    return super.getPageTitle(position);
            }
        }
    }

 

익명사용자 님이 2016년 10월 30일 질문
그렇게 하실려면 location api 에서 콜백이 호출된 다음 MainPagerAdapter를 생성하셔야 할 것 같은데, 그건 원하시는 게 아닐 것 같네요. location 정보가 필요한 프레그먼트에서 콜백이 끝난 다음에 호출된 메소드를 만드셔서 처리하셔야 할 것 같은데요. 당연히 location 정보가 null이라면 그 다음 처리를 무시하셔야 겠죠? 콜백이 호출될 동안 대기창을 띄우신 다던가 하는 것도 좋을 것 같구요. 이게 아니면  getLastKnownLocation() 메소드로 일단 location을 구하셔서 콜백이 끝나기 전까지 그걸 이용하셔도 될 것 같구요.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...