OnBackPressed to hide Не уничтожать активность
Я знаю, как отменить предыдущее нажатие клавиши, чтобы окно активности/главного окна оставалось видимым:
public void onBackPressed() {
return;
}
Моя цель - скрыть активность, однако, не закончив ее, как вы это делаете в событии onBackPressed?
то есть. Я хотел бы получить до onPause(), но не вызывать поведение по умолчанию onBackPressed(), которое по сути вызывает finish(). другой способ сказать, что я хотел бы имитировать onUserLeaveHint()?
любая помощь оценена!
Ответы
Ответ 1
Если вы хотите подражать кнопке "Главная" в конкретных действиях, просто выполните следующее:
Ниже API 5:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
Выше и на API 5:
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
Он переместит задачу в фоновый режим. Когда вы вернетесь, это будет как есть.
Вы можете увидеть дополнительную информацию об этом здесь: Отменить кнопку возврата, чтобы действовать как кнопка дома
Ответ 2
Если вы хотите подражать кнопке "Главная" в определенных действиях:
1-й метод:
@Override
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
}
Второй метод:
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
И если вы хотите перейти к предыдущему действию, не разрушая текущий:
@Override
public void onBackPressed() {
startActivity(new Intent(CurrentActivity.this, DestinationActivity.class);
}
И теперь из любой активности, если вы хотите открыть активность, которая находится в Background. Я называю CurrentActivity. вы могли бы называть его формой где-нибудь... вроде.. это возьмите эту актутичность и положите ее на вершину стека. и откройте его, где вы остановились.
Intent intent = new Intent(FromAnyActivity.this, CurrentActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
Флаги:
FLAG_ACTIVITY_REORDER_TO_FRONT
: изменить порядок действий из стека
FLAG_ACTIVITY_CLEAR_TOP
: Чтобы удалить все действия из верхней части
Ответ 3
Если вы не уничтожаете свою активность, вы должны установить режим запуска acitvity в single_instance и использовать moveTaskToBack (true) для отправки на задний план.
Ответ 4
Ну, вы не можете вернуться в текущий стек без finish
операции. Возможно, вы могли бы обнаружить onBackPressed()
, а затем запустить домашнее намерение в новой задаче:
public void onBackPressed() {
Intent i = new Intent("android.intent.action.MAIN");
i.addCategory("android.intent.category.HOME");
i.addCategory("android.intent.category.DEFAULT");
i.addCategory("android.intent.category.LAUNCHER");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
return;
}
Сообщите мне, если это работает.