MapView not returning to normal state after clicking toggle switch

☆樱花仙子☆ 提交于 2019-12-20 04:05:14

问题


I'm trying to get my map view to return to the normal style when I flick the switch within my fragment to the the OFF position but it's not working. The following is what occurs during the process that I am facing:

  1. Fragment (containg map) and switch appeared
  2. Flicked switch to ON position
  3. Styled map appeared
  4. Flicked switch to OFF position
  5. Map doesn't change

I tried using mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); but the map still remains stuck on the styled map view when I flick the switch. Not really sure as to what has gone wrong. What must be done to resolve this problem?

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

回答1:


In your else code, you are using setMapType while you should be using setMapStyle with a null parameter to clear the previously set styling, as mentioned here.

Set to null to clear any previous custom styling.

So, your code should go like this:

        @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.");
                }
            }
        }

You should also return the Switch back to its previous checked state in both your if (!success) conditions and show a Toast to the users so they can understand what is happening.




回答2:


The else of this part:

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

You need to uncomment it

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


来源:https://stackoverflow.com/questions/39811505/mapview-not-returning-to-normal-state-after-clicking-toggle-switch

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!