Мое приложение становится разбитым, когда я поворачиваю свой планшет от потокового к ландшафтному режиму и вот трассировка стека.Получение проблем при показе карты от 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 б карты работают отлично для ориентации меняет
в фрагменте или в деятельности? так как я взял одно действие (с макетом выдвижного ящика), а фрагмент имеет карту –
. Я думаю, что «Фрагмент» - это тот, который обрабатывает поворот в вашем приложении –
, все еще получая такое же исключение –