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

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

  1. 片段(包含地图)和开关出现了
  2. 轻拂开关到ON位置
  3. 出现了风格的地图
  4. 轻拂开关到OFF位置
  5. 地图不会改变

我尝试使用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(); } } 

在您的else代码中,您正在使用setMapType而您应该使用带有null参数的setMapStyle来清除先前设置的样式,如此处所述。

设置为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."); } } } 

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

这部分的其他部分:

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