2016-04-19 13 views
-1

Ich versuche den Kartentyp zu speichern, den der Benutzer über das Menü ausgewählt hat, sodass der Kartentyp auch dann beibehalten wird, wenn das Gerät gedreht wird oder die Aktivität für einige Momente ausgesetzt wird. Das habe ich gemacht, aber es scheint nicht zu funktionieren. Kannst du mir bitte sagen, was mache ich falsch?onSaveInstanceState funktioniert nicht

private int mapTypeSelected; 

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

    if (savedInstanceState == null){ 
      mapTypeSelected = GoogleMap.MAP_TYPE_NORMAL; 
     } else { 
      mapTypeSelected = savedInstanceState.getInt("the_map_type",GoogleMap.MAP_TYPE_NORMAL); 
       } 
     } 

Mein Hauptmenü mehr Auswahl hat, aber ich hinzugefügt hier nur die relevantesten für den Kartentyp:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 
     case R.id.change_map_type: 
      Toast.makeText(getApplicationContext(), "Change map type", Toast.LENGTH_LONG).show(); 
      return true; 
     case R.id.map_type_normal: 
      mapTypeSelected = GoogleMap.MAP_TYPE_NORMAL; 
      mMap.setMapType(mapTypeSelected); 
      return true; 
     case R.id.map_type_satellite: 
      mapTypeSelected = GoogleMap.MAP_TYPE_SATELLITE; 
      mMap.setMapType(mapTypeSelected); 
      return true; 

     default: 
      return super.onOptionsItemSelected(item); 

      } 

} 

Dann am Ende meiner Tätigkeit ich diese beiden hinzugefügt:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("the_map_type", mapTypeSelected); 

} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    savedInstanceState.get("the_map_type"); 

} 

Ich bin sicher, das ist etwas dummes, dass ich falsch mache, aber ich kann nicht scheinen, was zu sehen. Es gibt keinen Fehler und alles funktioniert gut, nur dass bei Rotation der Kartentyp immer auf normal wechselt. Vielen Dank im Voraus für jede Hilfe!

+0

Das ist nicht der Grund. Das war ein Schreibfehler, den ich gemacht habe. Jetzt ist es korrigiert. –

+0

Sie legen den Kartentyp nicht außerhalb des 'onOptionsItemSelected' fest ... Sie können es direkt nach dem Erhalten von' mMap' instance – Selvin

+0

ausführen. Können Sie etwas expliziter sein? –

Antwort

0

versuchen diese ..

private int mMapType; 
private boolean mRestoreMap; 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("the_map_type", mMap.getMapType()); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 

    mMapType = savedInstanceState.getInt("the_map_type", -1); 
    mRestoreMap = (mMapType != -1); 
} 

@Override 
public void onMapReady(GoogleMap map) { 
    mMap = map; 

    if(mRestoreMap){ 
     mMap.setMapType(mMapType); 
    } 

} 
+0

Ich habe schon die Antwort. Alles, was ich tun musste, ist mMap.setMapType (mapTypeSelected); in der onMapReady –

+0

Ohh sehe ich jetzt auch :) – Blackkara