方向更改后不会调用onMapReady

时间:2017-03-26 21:01:37

标签: java android

我正在使用带有fragmentPagerAdapter的viewPager创建一个应用程序,其中包含三个片段,其中一个是Google Maps API的MapFragment。我在MainActivity的onCreate()中创建一个新片段,在创建它之后立即调用getMapAsync(),然后将片段添加到viewPager。我的MainActivity实现了OnMapReadyCallback接口:

  public class MainActivity extends AppCompatActivity implements OnMapReadyCallback

{

私有MapFragment mapFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findAndInitViewPagerAndAdapter();
}

private void findAndInitViewPagerAndAdapter() {
    mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager());
    mViewPagerAdapter.addFragment(SearchFragment.newInstance(0, mCurrentLocation), getString(R.string.first_viewPager_title));
    mViewPagerAdapter.addFragment(FavoritesFragment.newInstance(1), getString(R.string.second_viewPager_title));
    if (!isTwoPane) {
        mViewPagerAdapter.addFragment(initMapFragment(), getString(R.string.third_viewPager_title));
    }
    mViewPager = (ViewPager) findViewById(R.id.viewpager);
    mViewPager.setAdapter(mViewPagerAdapter);
    mViewPager.setOffscreenPageLimit(2);
}

private MapFragment initMapFragment() {
    mapFragment = new MapFragment();
    mapFragment.getMapAsync(this);
    return mapFragment;
}



 @Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission
            (MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    if (mCurrentLocation == null) {
        mCurrentLocation = mLocationsManager.getLastSavedLocationFromSharedPreferences();
    }
    animateCameraToPosition(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude(), 2000);
    googleMap.setMyLocationEnabled(true);
    googleMap.getUiSettings().setMyLocationButtonEnabled(false);


    mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
        @Override
        public void onInfoWindowClick(Marker marker) {
            String placeID = marker.getTag().toString();
            createPlaceDetailFragment(placeID);
            mBottomBar.hideBottomNavigation(true);
        }
    });
    mMap.setOnPoiClickListener(new GoogleMap.OnPoiClickListener() {
        @Override
        public void onPoiClick(PointOfInterest pointOfInterest) {
            createPlaceDetailFragment(pointOfInterest.placeId);
            mBottomBar.hideBottomNavigation(true);
        }
    });
}

}

这在第一次启动应用程序时效果很好,但是当发生配置更改时,我显然无法理解的事情发生了,我的所有片段,其中的MapFragment都被重新创建,getMapAsync()方法被调用时我调试应用程序,但onMapReady回调没有,所以我没有得到一个新的GoogleMap对象。尽管如此,地图仍然是可以互动的。任何其他配置更改都不会改变这种情况。我有一个方法可以在地图上找到我的位置,另一个方法找到附近的地方,在第一次配置更改后都不会更新地图。

我缺少什么? 为什么不调用onMapReady回调?

谢谢

0 个答案:

没有答案