
当我点击“展商地图”按钮时,它会替换片段,但是当我点击后,我得到一个“java.lang.IllegalStateException:Activity已被销毁”错误
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.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)
这是我的MapsFragment.java文件:
public class MapsFragment extends SherlockFragment {button mHotelMapbutton;button mExhibitorbutton;GoogleMapFragment mGoogleMapFragment;ScaleImageVIEwFragment mScaleImageVIEwFragment;static boolean mShowingGoogleMap = true;@OverrIDepublic voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { mShowingGoogleMap = savedInstanceState.getBoolean("showingGoogleMap"); } mGoogleMapFragment = new GoogleMapFragment(); mScaleImageVIEwFragment = new ScaleImageVIEwFragment();}@OverrIDepublic voID onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("showingGoogleMap",mShowingGoogleMap);}@OverrIDepublic 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;}@OverrIDepublic voID onPause() { super.onPause(); getChildFragmentManager().beginTransaction() .remove(mGoogleMapFragment) .remove(mScaleImageVIEwFragment).commit();}@OverrIDepublic 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();}} 和我的GoogleMapFragment.java文件:
public class GoogleMapFragment extends Fragment {private SupportMapFragment mMapFragment;private GoogleMap mMap;private final LatLng PLANET_HolLYWOOD = new LatLng(36.1100,-115.1710);@OverrIDepublic 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);}@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater,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;}@OverrIDepublic voID onPause() { super.onPause(); getChildFragmentManager().beginTransaction() .remove(mMapFragment) .commit();}@OverrIDepublic voID onResume() { super.onResume(); mMap = mMapFragment.getMap(); if(mMap != null){ mMap.addMarker(new MarkerOptions().position(PLANET_HolLYWOOD).Title("Planet Hollywood")); }}} 我已经把头撞在墙上了很长一段时间,试图弄清楚这个错误,以及如何避免/修复它.
更新:
顺便说一句,如果我切换到:
getActivity().getSupportFragmentManager() .beginTransaction() .add(R.ID.map_holder,mMapFragment) .commit();
在GoogleMapFragment中,我不会收到错误,但是我无法抓住地图来设置制造商…它似乎是一个竞争条件
解决方法 如果您删除onDestroyVIEw()中的所有嵌套片段,您可以修复此问题:public voID onDestroyVIEw() { super.onDestroyVIEw(); Fragment fragment = (getFragmentManager().findFragmentByID(R.ID.map)); FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); ft.remove(fragment); ft.commit();} 并像往常一样在onCreateVIEw()中充气:
public VIEw onCreateVIEw(LayoutInflater inflater,Bundle savedInstanceState) { return inflater.inflate(R.layout.map,false);} 总结 以上是内存溢出为你收集整理的Android – 切换碎片 – Google Map Fragment V2 – 活动已被破坏全部内容,希望文章能够帮你解决Android – 切换碎片 – Google Map Fragment V2 – 活动已被破坏所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)