Ответ 1
Используйте метод Activity isFinishing()
.
@Override
protected void onDestroy() {
super.onDestroy();
if (isFinishing()) {
// do stuff
} else {
//It an orientation change.
}
}
Я понимаю, что когда меняется ориентация экрана, вызывается текущая деятельность onDestroy(), а затем функция onCreate() для эффективного воссоздания активности. Мне нужно знать, как программировать, выводится ли приложение или изменяется только ориентация.
Один из методов заключается в том, чтобы предыдущая активность уведомляла меня, когда вызывается метод onResume(), это позволит мне знать, что пользователь нажал кнопку "Назад", и ориентация не была изменена.
P.S. Я ищу решение, более элегантное, чем прослушивание обратной кнопки на аппаратном уровне.
Вот что я хотел сделать:
У меня есть две вкладки, когда действие вводится в первый раз или пользователь покинул действие и теперь вводит его, на основе некоторого критерия отображается определенная вкладка.
Когда меняется ориентация, мне нужно оставаться на той же вкладке.
Используйте метод Activity isFinishing()
.
@Override
protected void onDestroy() {
super.onDestroy();
if (isFinishing()) {
// do stuff
} else {
//It 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");
}
}
Summery
вы можете использовать isChangingConfigurations
в onStop
, чтобы проверить, не прекратится ли приложение, или из-за изменения ориентации.
или вы можете использовать isFinishing
проверить мой ответ здесь
для API lvl >= 11 У операции есть метод isChangingConfigurations()
Вы можете захватить значение метода Activity.getChangingConfigurations() в вашем обратном вызове onDestroy
. Это вернет результат, например ORIENTATION_PORTRAIT, который вы можете проверить против текущая ориентация.
Обратите внимание, что изменения активности и изменения ориентации не являются единственными условиями для рассмотрения здесь: как насчет возврата на главный экран, входящих телефонных звонков и других приложений, крадущих фокус, и всех других сценариев, когда ваша активность больше не в передней части стека?
В большинстве случаев вам не нужно это делать. Если вы пытаетесь исправить некоторую проблему состояния Activity (часто проявляющуюся как NullPointerException
при повороте экрана)
путем захвата события ориентации; просмотрите жизненный цикл Android Activity и убедитесь, что вы не просто пытаетесь взломать исправление для дефекта дизайна. Опубликуйте оригинальную проблему на этом сайте, если вы не уверены.