onSaveInstanceState不起作用

时间:2016-04-19 09:43:07

标签: android google-maps savestate

我正在尝试保存用户通过菜单选择的地图类型,因此即使设备将被旋转或活动暂停一会儿,地图的类型也会保留。这就是我所做的,但它似乎不起作用。请你告诉我我做错了什么?

A AND B

我的主菜单有更多选择,但我在这里只添加了地图类型的相关选项:

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

           }

}

我确信这是一个愚蠢的事情,我做错了,但我似乎无法看到什么。没有错误,一切正常,只是在旋转时,地图类型总是变为正常。 在此先感谢您的帮助!

1 个答案:

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

}