17

У меня есть активность, которую нельзя воссоздать после изменения ориентации. Я добавил в декларацию о деятельности в манифесте следующее:Изменение ориентации в сотах

android:configChanges="orientation" 

На Android 2.3 это работает отлично. В HONEYCOMB_MR2onCreate вызывается в любом случае при изменении ориентации.

Есть ли что-то еще, что нужно сделать на HONEYCOMB_MR2, чтобы предотвратить воссоздание активности после изменения ориентации?

+0

Вы пробовали 'android: configChanges =" keyboardHidden | orientation "'? Я бы не ожидал, что это изменит ситуацию, но стоит попробовать. – CommonsWare

+0

@CommonsWare Это не так, но при попытке всех возможных значений я нашел тот, который работает. См. Мой ответ. – hpique

ответ

37

Очевидно, использование orientation|screenSize (?) Предотвращает onCreate на сотах и ​​(до сих пор), похоже, ничего не сломало в предыдущих версиях Android.

android:configChanges="orientation|screenSize" 

Не знаю, зачем это нужно, и я не очень понимаю documentation об этом новом значении.

Я подозреваю, что в HONEYCOMB_MR2 при изменении ориентации активность рассматривает это как два изменения конфигурации: ориентация и размер экрана. И оба пытаются воссоздать действие по умолчанию.

+0

Да, это новые. Каково ваше значение 'android: targetSdkVersion'? – CommonsWare

+0

android: targetSdkVersion = "13" – hpique

+2

Хорошо, это вызовет то, что говорят документы. Это связано с этими новыми квалификаторами набора ресурсов: http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html В принципе, поскольку они расширили прежний маленький/нормальный/large/xlarge и port/land stuff для включения наборов ресурсов на основе измерений, они будут рассматривать изменения в этих измерениях как изменения конфигурации. Разумеется, могут быть устройства, в которых эти измерения изменяются не по ориентации (например, устройства с двумя экранами со вторым переключателем вкл/выкл экрана). – CommonsWare