Подтвердить что ты не робот

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

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

AndroidManifest.xml

<activity android:name="SearchMenuActivity" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="orientation"></activity>

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

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

4b9b3361

Ответ 1

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

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.

Ответ 2

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

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

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

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

Ответ 3

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

android:configChanges="orientation|keyboardHidden|screenSize"

Ответ 4

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

android:configChanges="keyboardHidden|orientation"

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

Ответ 5

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

android:configChanges="keyboardHidden|orientation|screenSize"

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

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

Ответ 6

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

Ответ 7

манифеста:

<activity
      android:name=".MainActivity"
      android:configChanges="orientation|keyboardHidden|screenSize">
</activity>

Активность и фрагмент:

@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