2013-02-11 12 views
7

Szukam poprawy wydajności SupportMapFragment po obróceniu urządzenia. Wydaje się, że fragment musi zostać odtworzony. Nie jestem tego pewien, jednak gdy urządzenie zostanie obrócone, płytki mapy muszą zostać ponownie załadowane. Z perspektywy wydajności miałoby sens, aby cały fragment mapy był zachowany i ponownie użyty bez konieczności ponownego tworzenia fragmentu. Każdy wgląd w to byłby doceniony.Odtworzyć mapy Android Maps V2 SupportMapFragment podczas obracania

Zgłaszam SupportMapFragment w xml i przy użyciu SetupMapIfNeeded(), jak opisano w dokumentacji api.

private void setUpMapIfNeeded() { 
    // Do a null check to confirm that we have not already instantiated the 
    // map. 
    if (mMap == null) { 
     // Try to obtain the map from the SupportMapFragment. 
     mMap = ((SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map)).getMap(); 
     // Check if we were successful in obtaining the map. 
     if (mMap != null) { 
      setUpMap(); 
     } 
    } 
} 
+0

Jeżeli masz gdziekolwiek z tym Partick? –

Odpowiedz

10

Sprawdź klasie RetainMapActivity z próbek. Działa jak marzenie. Oto jest:

public class RetainMapActivity extends FragmentActivity { 

private GoogleMap mMap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.basic_demo); 

    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 

    if (savedInstanceState == null) { 
     // First incarnation of this activity. 
     mapFragment.setRetainInstance(true); 
    } else { 
     // Reincarnated activity. The obtained map is the same map instance in the previous 
     // activity life cycle. There is no need to reinitialize it. 
     mMap = mapFragment.getMap(); 
    } 
    setUpMapIfNeeded(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    setUpMapIfNeeded(); 
} 

private void setUpMapIfNeeded() { 
    if (mMap == null) { 
     mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 
     if (mMap != null) { 
      setUpMap(); 
     } 
    } 
} 

private void setUpMap() { 
    mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
} 

}

+0

Brakowało mi tego w przykładach! dzięki – Patrick

+0

, ale musisz ponownie przerysować znacznik !! po prostu zachowaj stan mapy (powiększenie, położenie itp.), ale nie znaczników polyno ... – Xenione

+0

To rozwiązanie wydaje się działać. Nawet jeśli użyłem metody Asynk. Ale po 7 rotacji mapa jest tak opóźniona – user3528466

Powiązane problemy