La aplicación se está bloqueando mientras se usa Google map en Fragment
Estoy utilizando Fragmentos para mi aplicación por primera vez. He implementado Google Map en uno de los fragmentos, Siempre que selecciono la pestaña con el mapa que carga con éxito pero una vez que voy al menú principal en alguna otra actividad se bloquea no sé por qué.
Aquí está mi registro de accidentes: –
- Google map firmó errores clave de api en Android
- mapFragment.getMapAsync (this) - NullPointerException
- Recibiendo la pantalla ambigua del cielo mientras que carga el mapa de google
- ¿Quiero conseguir la localización exacta con el api de la localización fusionada de google?
- Cómo obtener el evento de clic del texto del marcador
03-28 14:14:23.175: E/AndroidRuntime(18215): FATAL EXCEPTION: main 03-28 14:14:23.175: E/AndroidRuntime(18215): java.lang.RuntimeException: Unable to destroy activity {MyFragmentActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3444) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3462) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.app.ActivityThread.access$1200(ActivityThread.java:149) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1358) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.os.Handler.dispatchMessage(Handler.java:99) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.os.Looper.loop(Looper.java:153) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.app.ActivityThread.main(ActivityThread.java:5000) 03-28 14:14:23.175: E/AndroidRuntime(18215): at java.lang.reflect.Method.invokeNative(Native Method) 03-28 14:14:23.175: E/AndroidRuntime(18215): at java.lang.reflect.Method.invoke(Method.java:511) 03-28 14:14:23.175: E/AndroidRuntime(18215): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 03-28 14:14:23.175: E/AndroidRuntime(18215): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 03-28 14:14:23.175: E/AndroidRuntime(18215): at dalvik.system.NativeStart.main(Native Method) 03-28 14:14:23.175: E/AndroidRuntime(18215): Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1343) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1361) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) 03-28 14:14:23.175: E/AndroidRuntime(18215): at com.fragments.FindMyCar.onDestroyView(FindMyCar.java:297) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.support.v4.app.Fragment.performDestroyView(Fragment.java:1705) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:996) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1921) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:335) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.app.Activity.performDestroy(Activity.java:5184) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1111) 03-28 14:14:23.175: E/AndroidRuntime(18215): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3431) 03-28 14:14:23.175: E/AndroidRuntime(18215): ... 11 more
Dentro de mi fragmento he implementado así: –
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.findmycar, null); initViews(view); // Getting Google Play availability status int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity()); if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available int requestCode = 10; Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, getActivity(), requestCode); dialog.show(); }else { // Google Play Services are available fm = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map); map = fm.getMap(); if(map == null){ //Toast.makeText(getActivity(), "null", 0).show(); } else{ map.setMyLocationEnabled(true); // checking for the best provider and connectivity // Getting LocationManager object from System Service LOCATION_SERVICE locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); if (netInfo !=null && netInfo.isConnected()) { if(isGpsEnable()){ provider=LocationManager.GPS_PROVIDER; mLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); if(mLocation==null){ //onLocationChanged(location); provider=LocationManager.NETWORK_PROVIDER; mLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); Log.d("Location","Location " + mLocation + " " + provider); if(mLocation!=null){ onLocationChanged(mLocation); } else{ Toast.makeText(getActivity(), "Unable to fetch your current location at the moment. Please try again later.", Toast.LENGTH_LONG).show(); } }else { onLocationChanged(mLocation); } } else{ showGpsAlert(); } } else{ Toast.makeText(getActivity(), "No internet connection", Toast.LENGTH_LONG).show(); } } } @Override public void onDestroyView() { super.onDestroyView(); Fragment fragment = (getFragmentManager().findFragmentById(R.id.map)); if(fragment!=null){ Toast.makeText(getActivity(), "inif", 0).show(); FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); ft.remove(fragment); ft.commit(); } else{ } } @Override public void onDestroy() { super.onDestroy(); } @Override public void onResume() { super.onResume(); } }
Su ejecución perfecta mientras se destruye la referencia en el método onDestroyView (), pero después de que la aplicación se bloquea, no sé qué hacer.
Cualquier ayuda sería apreciable. Gracias por adelantado.
- PhoneGap y Google Maps API V3 "¿Desactivado?"
- Cómo crear un mapa interactivo en Android
- Obtención de 0.0 para latitud y longitud mientras muestra la ubicación actual en el mapa
- Google Maps API V2 Zoom a la ubicación actual
- ¿Es posible eliminar la sombra de los iconos (elementos) en un googlemap?
- Cómo agregar un botón a una API v2 Google Maps
- Mapfragment findFragmentById siempre null
- La ventana de información de Mapas v2 no se muestra cuando se toca el marcador, pero sí después de tocar la Ventana de información invisible
prueba esto y déjame saber poner el siguiente código en onDestroyView()
try{ SupportMapFragment fragment = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)); FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); ft.remove(fragment); ft.commit(); }catch(Exception e){ }