2013-10-09 3 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

내 앱에서 나는 lide 메뉴를 사용합니다. 메뉴의 한 버튼은 "지도" 다른 하나는 "뉴스"입니다. 내가 처음 앱을 열면 뉴스 조각을보고, 슬라이드 메뉴를 열고, 프레스 맵과지도가 올바르게 표시됩니다. 내가 뉴스에 가서지도에 다시 들어가려고하면 오류가 발생합니다. 내 설명이 분명하다. :) –

+0

미안, 싱글 톤에 대한 나의 첫 번째 답변을 무시하십시오. newInstance 메서드에서 표준 Java 명명 규칙을 따르지 않기 때문에 약간 혼란 스러웠습니다. 클래스 이름은 대문자로 시작하지 않으며 로컬 변수는 대개 멤버 변수 용으로 예약 된 소문자로 시작합니다. – Tenfour04

답변

0

ActivityCreated (번들 번들)에서 메서드를 재정의하고 onCreateView에서이 행을 이동합니다.

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

죄송합니다.이 솔루션은 실제로 해결되지 않습니다. :) –

관련 문제