簡體   English   中英

onMapReady並不總是被調用

[英]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

但是,無論何時從GuideMainMap (使用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();

MainActivityMainMap

onMapReady()調用onMapReady() ,是因為MainMap是首次創建的。

GuideMainMap

不會調用onMapReady() ,因為您只是返回到MainMap並且MainMap始終存在於Activity stack並且其Map ready

解:

在啟動Guide Activity之前先完成MainMap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM