2014-03-26 67 views
3

我第一次爲我的應用程序使用Fragments。我已經在其中一個片段中實現了Google Map,每當我選擇具有映射的選項卡時,它都會成功加載,但是一旦我進入其他某個活動的主菜單,它就會崩潰,我不知道爲什麼。在片段中使用Google地圖時,應用程序崩潰

這裏是我的崩潰日誌: -

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 

在我的片段我已經實現了這樣的: -

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

它,而之後摧毀onDestroyView()方法的引用,但運行完美應用程序崩潰,不知道該怎麼做。

任何幫助將是可觀的。 在此先感謝。

回答

6

試試這個,讓我知道把下面的代碼onDestroyView()

try{ 
      SupportMapFragment fragment = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)); 
      FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); 
      ft.remove(fragment); 
      ft.commit(); 
     }catch(Exception e){ 
     } 
+0

我應該在哪裏把這個代碼,在我的onDestroyView()只? –

+0

@SalmanKhan yup –

+0

ok @SimplePlan,讓我檢查它.... –

相關問題