Как отличить изменение ориентации и оставить андроид приложения

Я понимаю, что когда меняется ориентация экрана, вызывается текущая деятельность onDestroy (), за которой следует onCreate (), чтобы эффективно воссоздать активность. Мне нужно знать, как программировать, выводится ли приложение или изменяется только ориентация.

Один из методов заключается в том, чтобы предыдущая активность уведомляла меня, когда вызывается метод onResume (), это даст мне знать, что пользователь нажал кнопку «Назад», и ориентация не была изменена.

PS Я ищу решение, более элегантное, чем прослушивание щелчка на задней панели оборудования.

Вот что я хотел сделать:

У меня есть две вкладки, когда активность вводится в первый раз или пользователь покинул эту активность и теперь ее вводит, на основе некоторого критерия отображается определенная вкладка.

Когда меняется ориентация, мне нужно оставаться на одной вкладке.

Solutions Collecting From Web of "Как отличить изменение ориентации и оставить андроид приложения"

Используйте метод isFinishing() Activity.

 @Override protected void onDestroy() { super.onDestroy(); if (isFinishing()) { // do stuff } else { //It's an orientation change. } } 

Вы можете использовать isChangingConfigurations() Читать из документации

Убедитесь, что эта активность находится в процессе уничтожения, чтобы воссоздать новую конфигурацию. Это часто используется в onStop (), чтобы определить, должно ли состояние быть очищено или будет передано в следующий экземпляр действия через onRetainNonConfigurationInstance ().

Возвращает Если активность срывается для воссоздания с новой конфигурацией, возвращается true; Else возвращает false

Объясните простым способом пример

isChangingConfigurations()

Это метод, используемый для проверки того, будет ли эта активность разрушена, чтобы снова воссоздаваться (в результате изменения ориентации)

Как это использовать ?

Если вы используете api> = 11, тогда не проблема, но если вы используете api <11, тогда мы должны обработать это руководство по методу. Я делаю логическую переменную с именем IsconfigChange

 private boolean IsconfigChange ; ... protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IsconfigChange = true ; } @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public boolean isChangingConfigurations() { if(android.os.Build.VERSION.SDK_INT >= 11){ Log.i("DEBUG", "Orientation changed api >= 11 "); return super.isChangingConfigurations(); }else { Log.i("DEBUG", "Orientation changed api < 11 "); return IsconfigChange; } } @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override protected void onStop() { super.onStop(); if(isChangingConfigurations()){ Log.i("DEBUG", "isChangingConfirgurations OnStop Called"); } else{ Log.i("DEBUG", "OnStop Called"); } } 

летний

Вы можете использовать isChangingConfigurations в onStop чтобы проверить, прекратится ли приложение, или из-за изменения ориентации.

Или вы можете использовать isFinishing проверить мой ответ здесь

Для API lvl> = 11 У Activity есть метод isChangingConfigurations()

Вы можете захватить значение метода Activity.getChangingConfigurations () в вашем onDestroy . Это вернет результат, например ORIENTATION_PORTRAIT , который вы можете проверить против текущей ориентации .

Обратите внимание, что изменения активности и изменения ориентации не являются единственными условиями для рассмотрения здесь: как насчет возврата на главный экран, входящих телефонных звонков и других приложений, крадущих фокус, и всех других сценариев, когда ваша активность больше не находится на переднем плане Из стека?

Большую часть времени вам не нужно это делать. Если вы пытаетесь исправить некоторую проблему состояния действия (часто проявляющуюся как NullPointerException при вращении экрана) путем захвата события ориентации; Просмотрите жизненный цикл Android-активности и убедитесь, что вы не просто пытаетесь взломать исправление недостатка дизайна. Опубликуйте оригинальную проблему на этом сайте, если вы не уверены.