2013-10-09 72 views
4

我有这个片段以呈现地图。 当我尝试在第二时间段得到的,我得到这个错误:java.lang.IllegalStateException:活动已被销毁 - Android片段

10-09 19:40:34.050: E/AndroidRuntime(21859): FATAL EXCEPTION: main 
10-09 19:40:34.050: E/AndroidRuntime(21859): java.lang.IllegalStateException: Activity has been destroyed 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1358) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at com.example.cultmacedonia_fragment.map.myMapFragment2.onCreateView(myMapFragment2.java:92) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.os.Handler.handleCallback(Handler.java:615) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.os.Handler.dispatchMessage(Handler.java:92) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.os.Looper.loop(Looper.java:137) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at android.app.ActivityThread.main(ActivityThread.java:4898) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at java.lang.reflect.Method.invokeNative(Native Method) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at java.lang.reflect.Method.invoke(Method.java:511) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
10-09 19:40:34.050: E/AndroidRuntime(21859): at dalvik.system.NativeStart.main(Native Method) 

其中线92

getChildFragmentManager().beginTransaction() 
       .add(R.id.map, mMapFragment).commit(); 

这是我的片断代码:

public class myMapFragment2 extends SherlockFragment { 

    private MapView mMapView; 
    private static GoogleMap mMap; 
    private Bundle mBundle; 
    private LocationManager locationManager; 
    private String provider; 
    static boolean isSinglePane; 
    private SupportMapFragment mMapFragment; 
    double latitude = 17.385044; 
    double longitude = 78.486671; 

    public static SherlockFragment newInstance() { 
     myMapFragment2 mFrgment = new myMapFragment2(); 
     return mFrgment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     GoogleMapOptions mapOptions = new GoogleMapOptions(); 

     Bundle bundle = getArguments(); 
     if (bundle != null) { 

      isSinglePane = bundle.containsKey("KEY_DETAIL"); 

     } else { 
      isSinglePane = false; 
     } 
     mapOptions.compassEnabled(true) 
       .camera(new CameraPosition(new LatLng(latitude, longitude), 13, 
         0f, 0f)); 

     mMapFragment = SupportMapFragment.newInstance(mapOptions); 

     Toast.makeText(getActivity().getApplicationContext(), 
       String.valueOf(isSinglePane), 1000).show(); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View inflatedView = inflater.inflate(R.layout.maps3, container, false); 
     setHasOptionsMenu(true); 

     try { 
      MapsInitializer.initialize(getActivity()); 
     } catch (GooglePlayServicesNotAvailableException e) { 
      // TODO handle this situation 
      Log.i("***GooglePlayServicesNotAvailableException", e.toString()); 
     } 

     getChildFragmentManager().beginTransaction() 
       .add(R.id.map, mMapFragment).commit(); 
     setUpMapIfNeeded(inflatedView); 
     return inflatedView; 
    } 

    private void setUpMapIfNeeded(View inflatedView) { 
     if (mMap == null) { 
      mMap = ((MapView) inflatedView.findViewById(R.id.map)).getMap(); 
      if (mMap != null) { 
       setUpMap(); 
      } 
     } 
    } 

    private void setUpMap() { 

     Marker marker = mMap.addMarker(new MarkerOptions() 
       .position(new LatLng(latitude, longitude)) 
       .title("You are here") 
       .snippet("your point") 
       .icon(BitmapDescriptorFactory 
         .defaultMarker(BitmapDescriptorFactory.HUE_AZURE))); 
     // create marker 

     marker.showInfoWindow(); 
     // color icon 

     // marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.my_marker_icon))); 
     // adding marker 
     mMap.setMyLocationEnabled(true); 
     mMap.getUiSettings().setCompassEnabled(true); 
     locationManager = (LocationManager) getActivity() 
       .getApplicationContext().getSystemService(
         Context.LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     provider = locationManager.getBestProvider(criteria, false); 

    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 

     inflater.inflate(R.menu.map_menu, menu); 
     super.onCreateOptionsMenu(menu, inflater); 
    } 

    public static void satelliteMap() { 
     mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
    } 

    public static void normalMap() { 
     mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
    } 

    public static void menuAll() { 
    } 

    public static void menuNearMe() { 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     if (mMap == null) { 
      mMap = mMapFragment.getMap(); 
      if (mMap != null) { 
       setUpMap(); 
      } 
     } 

    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     getChildFragmentManager().beginTransaction().remove(mMapFragment) 
       .commit(); 
    } 

    public void onDestroyView() { 
     super.onDestroyView(); 

     FragmentTransaction ft = getActivity().getSupportFragmentManager() 
       .beginTransaction(); 
     ft.remove(this); 
     ft.commit(); 
    } 
} 

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <com.google.android.gms.maps.MapView 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</RelativeLayout> 

第一次一切正常,但第二次应用程序崩溃。

+0

你是什么意思的“第二次进入片段”?你在做什么可能会破坏这项活动?即去另一个活动,并再次备份到这一个,去主屏幕或电话,然后返回到这个活动,等 – Tenfour04

+0

在我的应用程序,我使用了一个菜单。菜单中的一个按钮是“地图”另一个是“新闻”。当我第一次打开应用时,我看到新闻片段,我打开滑动菜单,正确地按下地图和地图显示。如果我去新闻,并尝试再次进入地图,那么我得到的错误。希望我的描述很明确:) –

+0

对不起,忽略我的第一个关于单身人士的答案。我有点困惑,因为你没有在你的newInstance方法中遵循标准的Java命名约定。您的类名不是以大写字母开头,而您的本地变量以小写m开头,通常是为成员变量保留的。 – Tenfour04

回答

0

重写方法onActivityCreated(Bundle bundle),并将这些行从onCreateView移入它。

getChildFragmentManager().beginTransaction() 
     .add(R.id.map, mMapFragment).commit(); 
    setUpMapIfNeeded(inflatedView); 
+0

对不起,这个解决方案真的没有工作:) –

相关问题