[英]onMapReady not always called
我有三個活動:
主要活動:
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
或按手機中的back鍵),我都只會得到:
I/MainMap: onCreate
I/MainMap: onStart
I/MainMap: onResume
不, onMapReady
因此“嚴肅的工作”從未得到解決。 我無法理解這種行為。 如何確保在所有情況下均調用onMapReady
?
完成地圖活動有點繁重。 如果恢復了Google Map Activity,則應該能夠重新使用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
}
當您從其他Activity按下時,Map Activity類將繼續。 而且由於地圖之前已經加載,因此onMapReady不會再次被調用。
要解決此問題,只需先完成“地圖活動”,然后再從“地圖活動”中啟動其他活動
像這樣
Intent intent = new Intent(MapActivity.class, OtherActivity.class);
startActivity(intent);
MapActivity.this.finish();
從MainActivity
到MainMap
:
onMapReady()
調用onMapReady()
,是因為MainMap
是首次創建的。
從Guide
到MainMap
:
不會調用onMapReady()
,因為您只是返回到MainMap
並且MainMap
始終存在於Activity stack
並且其Map
ready
。
解:
在啟動Guide
Activity之前先完成MainMap
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.