finish()уничтожьте действие, и вы не сможете получить к нему доступ, пока не создадите его заново.
onBackPressed()возвращается к действию или фрагменту перед тем, в котором вы находитесь в данный момент, все зависит от того, как вы его запрограммировали.
Например, если при изменении действия вы уничтожаете предыдущее с помощью finish(), при этом onBackPressed()оно не найдет предыдущее и закроет приложение, что может создать у вас ощущение, что оно есть, finish()но это не так . только поместил приложение в фоновый режим (я думаю, поэтому у вас может возникнуть путаница).
Действие A -> Действие B finish()-> Действие C
В этом случае, если вы находитесь в Упражнении C и делаете a, вы onBackPressed()вернетесь к Упражнению A.
Действие B finish()-> Действие C
В этом случае, если вы находитесь в действии C и onBackPressed()оставляете приложение в фоновом режиме
Это функция для завершения действия, удаления его из стека действий.
Естественная навигация между действиями
A->B->Cпри нажатии назадC->B->A
Если он используется finish()в какой-либо деятельности
A->B(finish)->Cнажимать назадC->A
Практическим случаем может быть заставка, которая после завершения загрузки переходит к другому действию, но удаляет его из стека, поэтому, если пользователь выполняет действие, чтобы вернуться, он выйдет из приложения.
Это для обнаружения события возврата, когда пользователь выполняет действие возврата, используя физическую кнопку, виртуальную кнопку илиUpNavButton
@Override
public void onBackPressed() {
...
}
Использование может быть различным, предотвратить выход из приложения во время выполнения задачи, вычислить двойное нажатие для выхода из приложения...
Кнопка «Назад» по умолчанию вызывает finish(), но если вы хотите переопределить этот метод, добавьте код до того, как он вернется и завершит работу, Activityвы должны создать файл onBackPressed().
Существует также способ определить, когда нажата кнопка «Назад».
@Override
public void onBackPressed() {
super.onBackPressed();
//codigo adicional
this.finish();
}
ВЕРСИЯ
При перезаписи метода onBackPressed()пользователь должен знать, почему он его перезаписывает, если он хочет вернуться к Activityпредыдущему без внесения каких-либо изменений, это не имеет смысла. Однако приведу пример. Если мы хотим изменить обратное событие и предупредить пользователя «Вы уверены, что выйдете», рекомендуется написать этот метод И сообщить методу, что он должен вернуться к Activityпредыдущему или к тому, который хочет пользователь.
Цитирую @FabioVenturiPastor
Например, если при смене активности вы закроете предыдущую с помощью finish(), то при выполнении onBackPressed() она не найдет предыдущую и приложение закроется, что может дать вам ощущение, что это Finish(), но это это не так. , это только поместило приложение в фоновый режим (я думаю, именно поэтому у вас может возникнуть путаница).
Как объяснялось выше, если пользователь переопределяет метод и не выполняет никакого дополнительного кода и не указывает, что он activityдолжен возвращаться, это не имеет никакого смысла.
Finish() : при вызове этого метода Activity закрывается и уничтожается. Этот метод можно вызывать везде, где это необходимо, например, при взаимодействии с каким-либо элементом в пользовательском интерфейсе или при выполнении какого-либо действия в нашем приложении.
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//llama finish() para cerrar Activity.
finish();
}
});
onBackPressed()
onBackPressed() : когда вы реализуете этот метод, в отличие от finish() , он вызывается исключительно при нажатии кнопки «Назад», и вам не нужно явно вызывать finish() внутри него, это если вы вызываетеsuper.onBackPressed()его, потому что он вызывает внутриfinish().
@Override
public void onBackPressed() {
//Si llamas super.onBackPressed(), esto internamente ejecuta finish().
super.onBackPressed();
}
если вы не звоните super.onBackPressed()и хотите прекратить действие, вам нужно будет позвонить finish():
@Override
public void onBackPressed() {
finish();
}
Важно то, что оба метода, находящиеся в Activity и имеющие пустой задний стек , могут закрыть приложение, если onBackPressed() вызывает finish().
Подводя итог, finish() завершает действие и уничтожает его, а onBackPressed() может определить, когда мы активируем кнопку «назад», он обнаруживает событие «назад» и выполняет внутреннее выполнение finish().
Метод Finish() завершит действие, а метод onBackPressed() будет выполнен, когда пользователь нажмет программную клавишу "Назад". В дополнение и т.к. информации об этих методах для фрагментов, с которыми я работаю, не так много. Если мы хотим завершить действие во фрагменте, это будет: «Это во фрагменте».
@Override
public void onClick(View v){
getActivity.finish()
}
Если вы работаете с фрагментами и хотите, чтобы при нажатии кнопки «Назад» появлялось предупреждение о том, хотите ли вы выйти из приложения, код должен быть выполнен в основной активности, где начались все вызовы фрагментов. «это в main_activity»:
@Override
public void onBackPressed() {
AlertDialog.Builder mensaje=new AlertDialog.Builder(this);
mensaje.setTitle("¿Desea Salir de la Aplicacion?");
mensaje.setCancelable(false);
mensaje.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
mensaje.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
mensaje.show();
}
finish()
уничтожьте действие, и вы не сможете получить к нему доступ, пока не создадите его заново.onBackPressed()
возвращается к действию или фрагменту перед тем, в котором вы находитесь в данный момент, все зависит от того, как вы его запрограммировали.Например, если при изменении действия вы уничтожаете предыдущее с помощью
finish()
, при этомonBackPressed()
оно не найдет предыдущее и закроет приложение, что может создать у вас ощущение, что оно есть,finish()
но это не так . только поместил приложение в фоновый режим (я думаю, поэтому у вас может возникнуть путаница).Действие A -> Действие B
finish()
-> Действие CВ этом случае, если вы находитесь в Упражнении C и делаете a, вы
onBackPressed()
вернетесь к Упражнению A.Действие B
finish()
-> Действие CВ этом случае, если вы находитесь в действии C и
onBackPressed()
оставляете приложение в фоновом режимефиниш()
Это функция для завершения действия, удаления его из стека действий.
Естественная навигация между действиями
A->B->C
при нажатии назадC->B->A
Если он используется
finish()
в какой-либо деятельностиA->B(finish)->C
нажимать назадC->A
Практическим случаем может быть заставка, которая после завершения загрузки переходит к другому действию, но удаляет его из стека, поэтому, если пользователь выполняет действие, чтобы вернуться, он выйдет из приложения.
SplasCreanActivity.java
OnBackPressed()
Это для обнаружения события возврата, когда пользователь выполняет действие возврата, используя физическую кнопку, виртуальную кнопку или
UpNavButton
Использование может быть различным, предотвратить выход из приложения во время выполнения задачи, вычислить двойное нажатие для выхода из приложения...
Кнопка «Назад» по умолчанию вызывает
finish()
, но если вы хотите переопределить этот метод, добавьте код до того, как он вернется и завершит работу,Activity
вы должны создать файлonBackPressed()
.Существует также способ определить, когда нажата кнопка «Назад».
Но правильно было бы:
ВЕРСИЯ
При перезаписи метода
onBackPressed()
пользователь должен знать, почему он его перезаписывает, если он хочет вернуться кActivity
предыдущему без внесения каких-либо изменений, это не имеет смысла. Однако приведу пример. Если мы хотим изменить обратное событие и предупредить пользователя «Вы уверены, что выйдете», рекомендуется написать этот метод И сообщить методу, что он должен вернуться кActivity
предыдущему или к тому, который хочет пользователь.Цитирую @FabioVenturiPastor
Как объяснялось выше, если пользователь переопределяет метод и не выполняет никакого дополнительного кода и не указывает, что он
activity
должен возвращаться, это не имеет никакого смысла.финиш()
Finish() : при вызове этого метода Activity закрывается и уничтожается. Этот метод можно вызывать везде, где это необходимо, например, при взаимодействии с каким-либо элементом в пользовательском интерфейсе или при выполнении какого-либо действия в нашем приложении.
onBackPressed()
onBackPressed() : когда вы реализуете этот метод, в отличие от finish() , он вызывается исключительно при нажатии кнопки «Назад», и вам не нужно явно вызывать finish() внутри него, это если вы вызываете
super.onBackPressed()
его, потому что он вызывает внутриfinish()
.если вы не звоните
super.onBackPressed()
и хотите прекратить действие, вам нужно будет позвонитьfinish()
:Важно то, что оба метода, находящиеся в Activity и имеющие пустой задний стек , могут закрыть приложение, если onBackPressed() вызывает finish().
Подводя итог, finish() завершает действие и уничтожает его, а onBackPressed() может определить, когда мы активируем кнопку «назад», он обнаруживает событие «назад» и выполняет внутреннее выполнение
finish()
.Метод Finish() завершит действие, а метод onBackPressed() будет выполнен, когда пользователь нажмет программную клавишу "Назад". В дополнение и т.к. информации об этих методах для фрагментов, с которыми я работаю, не так много. Если мы хотим завершить действие во фрагменте, это будет: «Это во фрагменте».
Если вы работаете с фрагментами и хотите, чтобы при нажатии кнопки «Назад» появлялось предупреждение о том, хотите ли вы выйти из приложения, код должен быть выполнен в основной активности, где начались все вызовы фрагментов. «это в main_activity»: