单击切换开关后 MapView 未返回正常状态
MapView not returning to normal state after clicking toggle switch
我试图将我的地图视图 return 设置为正常样式,当我将片段中的开关轻按到关闭位置时,但它不起作用。以下是我面临的过程中发生的情况:
- 片段(含地图)和开关出现
- 将开关拨到 ON 位置
- 样式化地图出现
- 将开关拨到关闭位置
- 地图不变
我尝试使用 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:
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);
}
在您的 else
代码中,您使用 setMapType
而您应该使用 setMapStyle
和 null
参数来清除先前设置的样式,如前所述 here.
Set to null to clear any previous custom styling.
因此,您的代码应如下所示:
@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.");
}
}
}
您还应该 return 在您的 if (!success)
条件下将 Switch
恢复到之前的检查状态,并向用户显示 Toast
以便他们可以理解什么正在发生。
我试图将我的地图视图 return 设置为正常样式,当我将片段中的开关轻按到关闭位置时,但它不起作用。以下是我面临的过程中发生的情况:
- 片段(含地图)和开关出现
- 将开关拨到 ON 位置
- 样式化地图出现
- 将开关拨到关闭位置
- 地图不变
我尝试使用 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:
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);
}
在您的 else
代码中,您使用 setMapType
而您应该使用 setMapStyle
和 null
参数来清除先前设置的样式,如前所述 here.
Set to null to clear any previous custom styling.
因此,您的代码应如下所示:
@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.");
}
}
}
您还应该 return 在您的 if (!success)
条件下将 Switch
恢复到之前的检查状态,并向用户显示 Toast
以便他们可以理解什么正在发生。