OnBackPressed to hide Не уничтожать активность

Я знаю, как отменить обратное нажатие, чтобы окно активности / главного окна оставалось видимым:

public void onBackPressed() { return; } 

Моя цель – скрыть активность, однако, не закончив ее, как вы это делаете в событии onBackPressed?

Т.е. я хотел бы получить до onPause (), но не вызывать поведение по умолчанию onBackPressed (), которое по сути вызывает finish (). Другой способ сказать, что я хотел бы имитировать onUserLeaveHint ()?

Любая помощь ценится!

Solutions Collecting From Web of "OnBackPressed to hide Не уничтожать активность"

Если вы хотите подражать кнопке «Главная» в конкретных действиях, просто выполните следующее:

Ниже 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); } 

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

Вы можете увидеть дополнительную информацию об этом здесь: Кнопка «Отменить назад», чтобы действовать как кнопка «домой»

Если вы хотите подражать кнопке «Главная» в определенных действиях:

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 : удалить все действия сверху

Если вы не уничтожаете свою активность, вы должны установить режим запуска acitvity в single_instance и использовать moveTaskToBack (true) для отправки на задний план.

Ну, вы не можете вернуться в текущий стек, не 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; } 

Дай мне знать, если это работает.