2015-05-15 3 views
2

У меня есть GoogleMap в SupportMapFragment. Он отлично работает на начальном дисплее. Камера перемещается, и добавляется круг. Но moveCamera и addCircle перестают работать после возвращения из своей дочерней активности.GoogleMap.moveCamera не работает после возвращения из дочерней активности

@Override 
public void onConnected(Bundle arg0) { 
    Log.d("Main Activity", 
      "onConnected called");  

     mMap.setOnMarkerClickListener(this); 
     mMap.setOnCameraChangeListener(this); 
     mMap.setOnMyLocationChangeListener(this); 
    // Display the connection status 
     Location loc = mLocationClient.getLastLocation(); 


     mGeolocation = new LatLng(loc.getLatitude(),loc.getLongitude()); 
     Log.d("GeoLocation", 
       "latitue:"+mGeolocation.latitude+" longitude:" + mGeolocation.longitude); 

     if(mMap.getMyLocation()==null) 
      Log.d("GeoLocation", 
        "mMap location not set yet"); 
     else  
      Log.d("GeoLocation", 
       "mMap location-----latitue:"+ mMap.getMyLocation().getLatitude()+" longitude:" + mMap.getMyLocation().getLongitude()); 

     CameraPosition targetPosition = new CameraPosition.Builder().target(mGeolocation) 
     .zoom(12.0f) 
     .bearing(0) 
     .tilt(25) 
     .build(); 


     mMap.moveCamera(CameraUpdateFactory.newCameraPosition(targetPosition)); 

     CircleOptions circleParam = new CircleOptions() 
            .center(mGeolocation) 
            .radius(MAX_DISTANCE) 
            .strokeColor(Color.BLUE) 
            .strokeWidth(5) 
            .visible(true); 

     mMap.addCircle(circleParam); 

} 
@Override 
public boolean onMarkerClick(Marker marker) { 
    Vendor v = listedVendors.get(marker.getId()); 
    if(v!=null){ 
     Intent intent = new Intent(this, MenuActivity.class); 
     intent.putExtra(EXTRA_VENDOR, v); 
     intent.putExtra(EXTRA_GEO, mGeolocation); 
     intent.putExtra(EXTRA_CURRENTADDRESS, mCurrentAddress); 
     startActivity(intent); 
    } 
    return false; 
} 

@Override 
public void onPause() { 
    Log.d("Main Activity", 
      "OnPause called");  
    super.onPause(); 
    if (mLocationClient != null) { 
     mLocationClient.disconnect(); 
    }` 
} 

Событие onCameraChange также не называется.

Заранее благодарим за любую помощь.

+0

В каком методе вы пытаетесь подключиться к GoogleApiClient? Я предполагаю, что GoogleMap будет снова создан при возврате к первоначальной активности, поэтому экземпляр, который вы настроили, отличается от того, который отображается при возврате –

+0

Вы видите журнал onConnected called ?, когда вы возвращаетесь к активность карты? Возможно, API все еще подключен и не нуждается в повторном подключении. Можете ли вы показать код, в котором вы запускаете дочернюю операцию? –

+0

Он был вызван в onResume, откуда я называю метод connect LocationClient. LocationClient был отключен в onPause. метод подключения инициирует обратный вызов onConnected при подключении службы определения местоположения. –

ответ

1

OK! Наконец, я решил проблему самостоятельно. Так или иначе, я объявлял mLocationClient как статический член активности

частный статический LocationClient mLocationClient;

Проблема вызвана «статическим» (я не знаю почему. Поскольку он является закрытым, он должен быть таким же, кроме способа доступа к ним). После удаления атрибута «static» из вышеприведенного утверждения все работает отлично.