onMapReady并不总是被称为

时间:2017-04-21 18:22:22

标签: java android google-maps-android-api-2

我有三项活动:

MainActivity:

public void start_main_map(View view) {
        Intent intent = new Intent(this, com.example.MainMap.class);
        startActivity(intent);
}

MainMap:

protected GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
    Log.i(TAG, "onCreate");
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
     mapFragment.getMapAsync(this);
}

@Override
protected void onStart() {
    Log.i(TAG, "onStart");
    mGoogleApiClient.connect();
    super.onStart();
}

@Override
protected void onStop() {
    Log.i(TAG, "onStop");
    mGoogleApiClient.disconnect();
    super.onStop();
}

@Override
protected void onPause() {
    Log.i(TAG, "onPause");
    super.onPause();
}

@Override
public void onResume() {
    Log.i(TAG, "onResume");
    super.onResume();
}

@Override
public void onMapReady(GoogleMap googleMap) {
    Log.i(TAG, "onMapReady");
    // do some serious work here
}

指南:

private void implement_back_button() {
    final Intent intent = new Intent(this, com.example.MainMap.class);
    back = (Button) findViewById(R.id.back_button);
    back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(intent);
        }
    });
}

每当我从MainActivity转到MainMap时,我都会:

I/MainMap: onCreate
I/MainMap: onStart
I/MainMap: onResume
I/MainMap: onMapReady

然而,每当我从Guide转到MainMap时(使用back_button或按我手机中的后退键),我只能得到:

I/MainMap: onCreate
I/MainMap: onStart
I/MainMap: onResume

不,onMapReady - 所以"严肃的工作"永远不会解决。我无法理解这种行为。如何确保在所有情况下都调用onMapReady

3 个答案:

答案 0 :(得分:2)

完成地图活动有点沉重。 如果Google地图活动已恢复,您应该可以重复使用Google地图参考。

这样的事情应该有效:

protected GoogleApiClient mGoogleApiClient;
protected SupportMapFragment mapFragment;
protected GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
    Log.i(TAG, "onCreate");
    mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

@Override
protected void onStart() {
    Log.i(TAG, "onStart");
    mGoogleApiClient.connect();
    super.onStart();
}

@Override
protected void onStop() {
    Log.i(TAG, "onStop");
    mGoogleApiClient.disconnect();
    super.onStop();
}

@Override
public void onResume() {
    Log.i(TAG, "onResume");
    super.onResume();

    //Added:
    if (mMap == null) {
      mapFragment.getMapAsync(this);
    } else {
      doSomeSeriousWork();
    }
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    Log.i(TAG, "onMapReady");
    doSomeSeriousWork();
}

public void doSomeSeriousWork() {
    // do some serious work here
}

答案 1 :(得分:1)

当你从其他Activity回来时,Map Activity类才会恢复。由于map之前已经加载了onMapReady,因此不会再次调用。

要解决此问题,请在从地图活动

开始其他活动之前完成地图活动

喜欢这个

Intent intent  = new Intent(MapActivity.class, OtherActivity.class);

startActivity(intent);

MapActivity.this.finish();

答案 2 :(得分:1)

MainActivityMainMap

onMapReady()被调用,因为MainMap首次创建。

GuideMainMap

onMapReady()未被调用,因为您只是返回MainMapMainMap alreday存在于活动stack中且其Map为{{1} }}

<强>解决方案:

在开始ready活动之前完成MainMap