#java #android #android-fragments #android-maps-v2 #android-switch
#java #Android #android-фрагменты #android-карты-v2 #android-переключатель
Вопрос:
Я пытаюсь вернуть свой вид карты к обычному стилю, когда я переключаю переключатель в моем фрагменте в положение ВЫКЛ, но он не работает. Следующее происходит во время процесса, с которым я сталкиваюсь:
- Появился фрагмент (containg map) и переключатель
- Переключенный переключатель в положение 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();
}
}
Ответ №1:
В вашем else
коде вы используете setMapType
while вы должны использовать setMapStyle
с null
параметром, чтобы очистить ранее установленный стиль, как упоминалось здесь .
Установите значение 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
пользователям, чтобы они могли понять, что происходит.
Комментарии:
1. К сожалению, я никогда раньше не работал с носимыми устройствами.
Ответ №2:
Остальное в этой части:
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);
}
Комментарии:
1. Это было раскомментировано в первую очередь, но все РАВНО не работает.
2. Ну, тогда посмотрите на другое: логический успех = mGoogleMap.setMapStyle(new MapStyleOptions(getResources() .getString(R.string.style_json))); для активированного, противоположное этому должно быть нет в инструкции else