1

Я пытаюсь вернуть свое представление карты в нормальный стиль, когда я переключаю переключатель в своем фрагменте в положение «ВЫКЛ», но он не работает. Ниже то, что происходит во время процесса, который я столкнулся:MapView не возвращается в нормальное состояние после нажатия переключателя тумблера

  1. Фрагмент (с указанной картой) и переключатель появился
  2. щелкнул переключатель в положение ON
  3. стилизованных появилась карта
  4. щелкнул переключатель в положение OFF
  5. Карта не меняет

Я попытался с помощью mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); но карта все еще остается застрял на стилизованной ма p, когда я переключаю переключатель. Не совсем уверен в том, что пошло не так. Что нужно сделать для решения этой проблемы?

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

В вашем else коде, вы используете setMapType в то время как вы должны использовать setMapStyle с null чтобы очистить ранее установленный стиль, как указано here.

Установите значение 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 для пользователей, чтобы они могли понять, что происходит.

+0

К сожалению, я никогда раньше не работал с Wearables. – MohanadMohie

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

Это было раскомментировано, но это STILL не работает. – MacaronLover

+0

Хорошо, тогда посмотрите на другую вещь: boolean success = mGoogleMap.setMapStyle (новые MapStyleOptions (getResources() .getString (R.string.style_json))); для активированного, противоположное тому, что нужно сделать в инструкции else – lawonga

 Смежные вопросы

  • Нет связанных вопросов^_^