单击切换开关后,MapView未返回正常状态

时间:2016-10-01 21:11:45

标签: java android android-fragments android-maps-v2 android-switch

当我将片段中的开关轻弹到OFF位置时,我正试图让我的地图视图恢复正常样式,但它不起作用。以下是我所面临的过程中发生的事情:

  1. 片段(包含地图)和开关出现
  2. 轻拂开关到ON位置
  3. 出现了样式地图
  4. 轻拂开关到OFF位置
  5. 地图不会改变
  6. 我尝试使用mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);,但是当我轻拂开关时,地图仍然停留在样式化的地图视图上。不确定出了什么问题。必须采取哪些措施来解决这个问题?

    public class FragmentMap extends android.support.v4.app.Fragment implements OnMapReadyCallback {
    
        private SwitchCompat swt;
    
        public FragmentMap() {
        }
    
        GoogleMap mGoogleMap;
        MapView mMapView;
    
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_map, container, false);
    
            mMapView = (MapView) v.findViewById(R.id.map_park);
            mMapView.onCreate(savedInstanceState);
            mMapView.getMapAsync(this);
    
            swt = (SwitchCompat) v.findViewById(R.id.switch_map_park);
            swt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(isChecked){
                        boolean success = mGoogleMap.setMapStyle(new MapStyleOptions(getResources()
                                .getString(R.string.style_json)));
    
                        if (!success) {
                            Log.e("TabFragmentMap", "Style parsing failed.");
                        }
                    }else{
                        // What goes here?
                        mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                    }
                }
            });
    
            return v;
        }
    
        @Override
        public void onMapReady(GoogleMap googleMap) {
            mGoogleMap = googleMap;
            mGoogleMap.getUiSettings().setZoomControlsEnabled(true);
            mGoogleMap.setBuildingsEnabled(true);
            mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        }
    
        @Override
        public void onResume() {
            super.onResume();
            mMapView.onResume();
        }
    
        @Override
        public void onPause() {
            super.onPause();
            mMapView.onPause();
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            mMapView.onDestroy();
        }
    
        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            mMapView.onSaveInstanceState(outState);
        }
    
        @Override
        public void onLowMemory() {
            super.onLowMemory();
            mMapView.onLowMemory();
        }
    }
    

2 个答案:

答案 0 :(得分:1)

在您的else代码中,您正在使用setMapType,同时应使用setMapStyle null参数来清除之前设置的样式,如上所述{{3 }}

  

设置为null以清除任何以前的自定义样式。

所以,你的代码应该是这样的:

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                boolean success = mGoogleMap.setMapStyle(new MapStyleOptions(getResources()
                        .getString(R.string.style_json)));

                if (!success) {
                    Log.e("TabFragmentMap", "Style parsing failed.");
                }
            }else{
                boolean success = mGoogleMap.setMapStyle(null);

                if (!success) {
                    Log.e("TabFragmentMap", "Removing style failed.");
                }
            }
        }

您还应该在Switch条件下将if (!success)返回到之前检查状态,并向用户显示Toast,以便他们了解正在发生的事情。

答案 1 :(得分:-1)

这部分的其他部分:

            if(isChecked){
                boolean success = mGoogleMap.setMapStyle(new MapStyleOptions(getResources()
                        .getString(R.string.style_json)));

                if (!success) {
                    Log.e("TabFragmentMap", "Style parsing failed.");
                }
            }else{
                // What goes here?
                // mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            }

您需要取消注释

            else {
                // What goes here?
                mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            }