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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

вы можете использовать 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");
        }
    }

Summery

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

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

Ответ 3

для API lvl >= 11 У операции есть метод isChangingConfigurations()

Ответ 4

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

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

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