Android onConfigurationChanged не вызывается

У меня возникли проблемы с сообщением Android, чтобы он не вызывал onCreate() когда меняется ориентация. Я добавил android:configChanges="orientation" в мой манифест, но все же, когда onCreate() изменение ориентации на onCreate() . Вот мой код.

AndroidManifest.xml

  

SearchMenuActivity.java

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the current layout to the search_menu setContentView(R.layout.search_menu_activity); Log.d(TAG, "onCreate() Called"); } @Override public void onConfigurationChanged(Configuration newConfig) { //don't reload the current page when the orientation is changed Log.d(TAG, "onConfigurationChanged() Called"); super.onConfigurationChanged(newConfig); } 

И мой выход LogCat

 06-23 12:33:20.327: DEBUG/APP(2905): onCreate() Called //Orientation Changes 06-23 12:33:23.842: DEBUG/APP(2905): onCreate() Called 

Кто-нибудь знает, что я делаю неправильно? Благодарю.

Несколько вещей, чтобы попробовать:

android:configChanges="orientation|keyboardHidden|screenSize" а не android:configChanges="orientation"

Убедитесь, что вы не вызываете setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); в любом месте. Это приведет к тому, что onConfigurationChange () не будет срабатывать.

Убедитесь, что вы не используете android:screenOrientation в манифесте.

Если это не работает, прочитайте в документе Android о обработке изменений времени выполнения и убедитесь, что вы все делаете правильно. В вашем коде может быть что-то еще, что вызывает проблему. http://developer.android.com/guide/topics/resources/runtime-changes.html

EDIT: Как заметил derrik, я предположил, что вы меняли конфигурацию с помощью акселерометра, определяющего, каким образом устройство сталкивается. Если вы хотите, чтобы конфигурация изменилась по мере того, как клавиатура отображается / скрыта, configChanges в манифесте также должны включать в себя keyboardHidden .

Это был мой гремлин по той же проблеме:

Внимание: Начиная с Android 3.2 (уровень API 13), «размер экрана» также изменяется, когда устройство переключается между портретной и альбомной ориентацией. Таким образом, если вы хотите предотвратить перезапуск во время изменения ориентации при разработке для уровня API 13 или выше (как объявлено атрибутами minSdkVersion и targetSdkVersion), вы должны включить значение «screenSize» в дополнение к значению «ориентация». То есть, вы должны декалировать android: configChanges = “orientation | screenSize”. Однако, если ваше приложение нацелено на уровень API 12 или ниже, ваша деятельность всегда обрабатывает это изменение самой конфигурации (это изменение конфигурации не перезапускает вашу активность даже при работе на устройстве Android 3.2 или выше).

(Из http://developer.android.com/guide/topics/resources/runtime-changes.html )

TL; DR: добавить «| screenSize» в android: configChanges = «ориентация» для API 14+

Попробуйте использовать этот …

 android:configChanges="orientation|keyboardHidden|screenSize" 

Вы должны изменить запись configChanges в AndroidManifest.xml, чтобы:

 android:configChanges="keyboardHidden|orientation" 

В противном случае сдвиг клавиатуры не будет срабатывать в режимеConfigurationChange (), даже если ориентация изменится. Я просто проверил это на своем HTC Desire Z.

Добавьте это в свой манифест к каждому действию.

 android:configChanges="keyboardHidden|orientation|screenSize" 

Затем переопределите onConfigurationChanged в вашей деятельности как таковой

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } 

Это не срабатывало в моем Fragment ( Fragments не зарегистрированы в AndroidManifest.xml ), поэтому мне пришлось перенести его в Activity TabsPagerActivity my Fragment , в моем случае TabsPagerActivity .

Manifest:

   Размер   

Активность и fragment:

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d(TAG, "onConfigurationChanged " + (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ? "landscape" : "portrait")); } 

Вывод:

 10-29 21:53:26.951 D/FragmentOne: onConfigurationChanged landscape 10-29 21:53:26.951 D/MainActivity:onConfigurationChanged landscape 

Немногие вещи могут быть перекрестной проверкой:

В моем случае я отслеживал изменение языка устройства с помощью onConfigurationChanged.

Немногие вещи, которые нужно знать о onConfigurationChanged, есть некоторая разница в поведении между onConfigurationChanged of Activity и Application.

Когда вы меняете конфигурацию устройства, уровень приложения onConfigurationChanged будет вызываться автоматически и немедленно, но onConfigurationChanged of activity будет вызывать, когда вы переходите к этой активности.

и еще одна вещь – только локаль в манифесте не будет работать. Так что вы объявляете другое событие изменения конфигурации вместе с языковой версией (в моем случае), которая должна быть как android: configChanges = “layoutDirection | locale”

  • Уменьшение размера приложения для Android (apk)
  • Как сгруппировать сетку 3x3 переключателей?
  • Jar Mismatch Нашел 2 версии android-support-v4.jar в списке зависимостей
  • TransformException дубликат записи для common.annotations.Beta
  • Не удалось выполнить com.google.android.gms play-services-auth: 11.4.0
  • Выполнение динамического кода
  • Каковы все различные способы создания объекта в Java?
  • Android: как анализировать URL-адрес String с пробелами для URI-объекта?
  • Любой ярлык для инициализации всех элементов массива до нуля?
  • Как это возможно? Сервис работает неограниченно, а также разрешает привязку к андроиду?
  • Разница между выражениями Return и Break
  • Давайте будем гением компьютера.