Android – 切换碎片 – Google Map Fragment V2 – 活动已被破坏

Android – 切换碎片 – Google Map Fragment V2 – 活动已被破坏,第1张

概述我有一个地图活动(SherlockFragmentActivity)加载到地图片段中,该片段在显示2个不同片段之间有2个按钮和切换(GoogleMapFragment& Scale ImageViewFragment)   当我点击“展商地图”按钮时,它会替换片段,但是当我点击后,我得到一个“java.lang.IllegalStateException:Activity已被销毁”错误 ERROR 我有一个地图活动(SherlockFragmentActivity)加载到地图片段中,该片段在显示2个不同片段之间有2个按钮和切换(GoogleMapFragment& Scale ImageVIEwFragment)

当我点击“展商地图”按钮时,它会替换片段,但是当我点击后,我得到一个“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 – 活动已被破坏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1131826.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存