2017-04-21 32 views
0

我有三個活動:onMapReady並不總是叫

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); 
     } 
    }); 
} 

每當我去從MainActivityMainMap我得到:

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

然而,每當我去從GuideMainMap(使用的back_button或按在我的手機返回鍵),我只得到:

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

沒有,onMapReady - 所以「嚴肅的工作」從未解決。我無法理解這種行爲。如何確保在所有情況下調用onMapReady

+0

http://stackoverflow.com/a/41365553/4432830希望這有助於 – Sammer

+0

你的問題不明確。你的意思是如果你去主要活動,onMapReady調用地圖活動,但如果你從其他活動回到地圖活動,onMapReady不打電話? –

+0

是的,這正是我的意思 –

回答

2

完成地圖活動有點沉重。 如果Google Map活動恢復,您應該可以重新使用GoogleMap參考。

像這樣的東西應該工作:

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

當您從其他活動中按下時,Map Activity類將恢復。由於Map之前已經加載過,所以MapReady不會再被調用。

爲了解決這個問題,只是完成地圖活動之前,從地圖活動啓動其他活動

喜歡這個

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

startActivity(intent); 

MapActivity.this.finish(); 
1

MainActivityMainMap:所謂

onMapReady(),因爲MainMap創建首次。

GuideMainMap

onMapReady()不叫,因爲你只是回到回MainMapMainMap alreday存在於活動stack及其Mapready

解決方案:

完成MainMap開始Guide活動之前。