0

Мое приложение становится разбитым, когда я поворачиваю свой планшет от потокового к ландшафтному режиму и вот трассировка стека.Получение проблем при показе карты от potrait к пейзажу

04-13 16:06:25.802: E/AndroidRuntime(6231): java.lang.RuntimeException: Unable to destroy activity {info.androidhive.slidingmenu/info.androidhive.slidingmenu.MainActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3273) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3291) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3489) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.ActivityThread.access$700(ActivityThread.java:130) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.os.Looper.loop(Looper.java:137) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at dalvik.system.NativeStart.main(Native Method) 
04-13 16:06:25.802: E/AndroidRuntime(6231): Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1280) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1291) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.BackStackRecord.commitInternal(BackStackRecord.java:548) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.BackStackRecord.commit(BackStackRecord.java:532) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at info.androidhive.slidingmenu.PhotosFragment.onDestroyView(PhotosFragment.java:144) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.Fragment.performDestroyView(Fragment.java:1596) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:919) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1017) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1826) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.Activity.performDestroy(Activity.java:5171) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1109) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3260) 
04-13 16:06:25.802: E/AndroidRuntime(6231):  ... 12 more 

Я использую навигационный ящик в своем проекте. В ящике у меня есть список, который при нажатии открывается фрагмент. В этом фрагменте я использую карту. Xml карты производится с использованием тега фрагмента в xml.

Это мой фрагмент кода р

ublic View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     rootView = inflater.inflate(R.layout.fragment_photos, container, false); 
     googleMap = ((MapFragment) getFragmentManager().findFragmentById(
       R.id.currentmap)).getMap(); 
     geocoder = new Geocoder(getActivity(), Locale.getDefault()); 
     // Enabling MyLocation Layer of Google Map 
     googleMap.setMyLocationEnabled(true);    


     // Getting LocationManager object from System Service LOCATION_SERVICE 
     LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 

     // Creating a criteria object to retrieve provider 
     Criteria criteria = new Criteria(); 

     // Getting the name of the best provider 
     String provider = locationManager.getBestProvider(criteria, true); 

     // Getting Current Location 
     Location location = locationManager.getLastKnownLocation(provider); 

     if(location!=null){ 
       onLocationChanged(location); 
     } 

     locationManager.requestLocationUpdates(provider, 20000, 0, this); 

     return rootView; 
    } 
    private String getCompleteAddressString(double LATITUDE, double LONGITUDE) { 
     String strAdd = ""; 

     try { 
      List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1); 
      if (addresses != null) { 
       Address returnedAddress = addresses.get(0); 
       StringBuilder strReturnedAddress = new StringBuilder(""); 

       for (int i = 0; i < returnedAddress.getMaxAddressLineIndex(); i++) { 
        strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n"); 
       } 
       strAdd = strReturnedAddress.toString(); 
       tvLocation.setText(strAdd);  
       Log.w("My Current loction address", "" + strReturnedAddress.toString()); 
      } else { 
       Log.w("My Current loction address", "No Address returned!"); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.w("My Current loction address", "Canont get Address!"); 
     } 
     return strAdd; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 

     tvLocation = (TextView) rootView.findViewById(R.id.tv_location); 

     // Getting latitude of the current location 
     double latitude = location.getLatitude(); 

     // Getting longitude of the current location 
     double longitude = location.getLongitude();  

     // Creating a LatLng object for the current location 
     LatLng latLng = new LatLng(latitude, longitude); 

     // Showing the current location in Google Map 
     googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 

     // Zoom in the Google Map 
     googleMap.animateCamera(CameraUpdateFactory.zoomTo(20)); 

     // Setting latitude and longitude in the TextView tv_location 
     getCompleteAddressString(latitude,longitude); 


    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub  
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub  
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub  
    } 
    @Override 
    public void onDestroyView() { 

     super.onDestroyView(); 
     Log.v("in on destroy","destroy"); 

     Fragment fragment = (getFragmentManager().findFragmentById(R.id.currentmap)); 
     if (fragment != null){ 
      Log.v("in on destroy","removing"); 
      getFragmentManager().beginTransaction() 
      .remove(fragment) 
      .commit(); 
      Log.v("in on destroy","completed"); 
      }  

     Log.v("value is", val+""); 
} 
} 

Можно ли решить мою проблему плз. Эта проблема возникает только на фрагменте карт. Другие фрагменты, на которых я Havent б карты работают отлично для ориентации меняет

ответ

0

Это bug, вставьте этот код:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    //No call for super(). Bug on API Level > 11. 
} 
+0

в фрагменте или в деятельности? так как я взял одно действие (с макетом выдвижного ящика), а фрагмент имеет карту –

+0

. Я думаю, что «Фрагмент» - это тот, который обрабатывает поворот в вашем приложении –

+0

, все еще получая такое же исключение –

0

Вы должны реализовать жизненный цикл MapViews называет:

Добавьте это к вашему код:

private MapView mapView; 
private GoogleMap googleMap; 

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 


rootView = inflater.inflate(R.layout.fragment_photos, container, false) 
mapView = (MapView) rootView.findViewById(R.id.currentmap); 

try { 
    MapsInitializer.initialize(getActivity()); 
    mapView.onCreate(savedInstanceState); 


    } catch (GooglePlayServicesNotAvailableException e) { 
     //Google play services not availabe 
    } 
if(mapView!= null){ 



googleMap = mapView.getMap(); 
} 

// ваш код здесь

}

@Override 
public void onResume() { 
    super.onResume(); 
    if(mapView!=null) 
    mapView.onResume(); 

} 


@Override 
public void onPause() { 
    super.onPause(); 
    if(mapView!=null) 
    mapView.onPause(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if(mapView!=null) 
    mapView.onDestroy(); 
} 

@Override 
public void onLowMemory() { 
    super.onLowMemory(); 
    mapView.onLowMemory(); 
} 

Использование LinearLayout или RelativeLayout как родитель вашего MapView:

<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/currentmap" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

</RelativeLayout> 
+0

вы можете изменить в моем коде. Я не получаю, как использовать эти –

+0

currentmap - это идентификатор фрагмента, а не mapview –

+0

, вы можете поместить свой mapview в библиотеку LinearLayout или RealtiveLayout: – venimania

0

Наконец я получил решение. Мне нужно добавить это в манифест

<activity 
     android:theme="@style/AppTheme" 
     android:name="MyFragmentActivity" 
     android:label="@string/fragmentActivity" 
     android:configChanges="orientation|screenSize"> 
    </activity> 
Смежные вопросы