Note that there are some explanatory texts on larger screens.

plurals
  1. POSwitching fragments - Google Map Fragment V2 - Activity has been destroyed Error
    text
    copied!<p>I have a Maps Activity (SherlockFragmentActivity) that loads in a Maps Fragment that has 2 buttons and switches between showing 2 different fragments (GoogleMapFragment &amp; ScaleImageViewFragment)</p> <p><img src="https://i.stack.imgur.com/F0sWE.png" alt="Screen Shot"> </p> <p>When I click the Exhibitor Map button it replaces the fragment, however when I click back I get an "java.lang.IllegalStateException: Activity has been destroyed" error</p> <pre><code>ERROR/AndroidRuntime(5768): FATAL EXCEPTION: main java.lang.IllegalStateException: Activity has been destroyed at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1342) at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) at com.takeit2eleven.towniemeeting.android.fragments.GoogleMapFragment.onCreateView(GoogleMapFragment.java:42) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) </code></pre> <p>Here is my MapsFragment.java file:</p> <pre><code>public class MapsFragment extends SherlockFragment { Button mHotelMapButton; Button mExhibitorButton; GoogleMapFragment mGoogleMapFragment; ScaleImageViewFragment mScaleImageViewFragment; static boolean mShowingGoogleMap = true; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { mShowingGoogleMap = savedInstanceState.getBoolean("showingGoogleMap"); } mGoogleMapFragment = new GoogleMapFragment(); mScaleImageViewFragment = new ScaleImageViewFragment(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("showingGoogleMap", mShowingGoogleMap); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.maps_fragment, null); mHotelMapButton = (Button) view.findViewById(R.id.hotel_button); mExhibitorButton = (Button) view.findViewById(R.id.exhititor_map_button); mExhibitorButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mShowingGoogleMap = false; showExhibitorFragment(); } }); mHotelMapButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mShowingGoogleMap = true; showGoogleMapFragment(); } }); return view; } @Override public void onPause() { super.onPause(); getChildFragmentManager().beginTransaction() .remove(mGoogleMapFragment) .remove(mScaleImageViewFragment).commit(); } @Override public void onResume() { super.onResume(); if(mShowingGoogleMap){ showGoogleMapFragment(); }else{ showExhibitorFragment(); } } private void showExhibitorFragment(){ getChildFragmentManager().beginTransaction() .remove(mGoogleMapFragment) .remove(mScaleImageViewFragment) .replace(R.id.fragment_placeholder, mScaleImageViewFragment, "scaleImage") .commit(); } private void showGoogleMapFragment(){ getChildFragmentManager().beginTransaction() .remove(mGoogleMapFragment) .remove(mScaleImageViewFragment) .replace(R.id.fragment_placeholder, mGoogleMapFragment, "mapFragment") .commit(); } } </code></pre> <p>and my GoogleMapFragment.java file:</p> <pre><code>public class GoogleMapFragment extends Fragment { private SupportMapFragment mMapFragment; private GoogleMap mMap; private final LatLng PLANET_HOLLYWOOD = new LatLng(36.1100, -115.1710); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GoogleMapOptions mapOptions = new GoogleMapOptions(); mapOptions.compassEnabled(true).camera(new CameraPosition(PLANET_HOLLYWOOD, 13, 0f, 0f)); mMapFragment = SupportMapFragment.newInstance(mapOptions); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceState); View view = inflater.inflate(R.layout.google_map, container, false); getChildFragmentManager() .beginTransaction() .add(R.id.map_holder, mMapFragment) .commit(); return view; } @Override public void onPause() { super.onPause(); getChildFragmentManager().beginTransaction() .remove(mMapFragment) .commit(); } @Override public void onResume() { super.onResume(); mMap = mMapFragment.getMap(); if(mMap != null){ mMap.addMarker(new MarkerOptions().position(PLANET_HOLLYWOOD).title("Planet Hollywood")); } } } </code></pre> <p>I have been banging my head against the wall for quite some time trying to figure out this error and how to avoid/fix it.</p> <p>Update:</p> <p>by the way if I switch to:</p> <pre><code>getActivity().getSupportFragmentManager() .beginTransaction() .add(R.id.map_holder, mMapFragment) .commit(); </code></pre> <p>in the GoogleMapFragment then I dont get the Error, but I cant get a hold of the map to set the maker... it seems like a race condition</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload