点击拨动开关后,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,而您应该使用setMapStylenull参数来清除先前设置的样式,如这里所述。

设置为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,以便他们能够理解正在发生的事情。

这部分的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);
            }

相关内容

  • 没有找到相关文章

最新更新