2016-04-19 4 views
-1

Я пытаюсь сохранить тип карты, которую пользователь выбрал в меню, чтобы тип карты оставался, даже если устройство будет повернуто или действие будет приостановлено на несколько мгновений. Это то, что я сделал, но он, похоже, не работает. Пожалуйста, скажите мне, что я делаю неправильно?onSaveInstanceState не работает

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

Мое главное меню имеет больше вариантов, но я добавил здесь только соответствующие них для типа карты:

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

      } 

} 

Затем в конце моей деятельности я добавил это два:

@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"); 

} 

Я уверен, что это что-то глупое, что я поступаю неправильно, но я не могу понять, что. Ошибок нет, и все работает нормально, только при ротации тип карты всегда меняется. Заранее благодарим за любую помощь!

+0

Это не причина. Это была ошибка, которую я совершил. Теперь это исправлено. –

+0

Вы не задаете тип карты вне 'onOptionsItemSelected' ... вы можете сделать это сразу после получения экземпляра' mMap' – Selvin

+0

Можете ли вы быть более откровенным? –

ответ

0

Попробуйте это ..

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

У меня уже есть ответ. Все, что мне нужно было сделать, это добавить mMap.setMapType (mapTypeSelected); в onMapReady –

+0

Ой, я вижу теперь тоже :) – Blackkara

Смежные вопросы