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;             
}

Сообщите мне, если это работает.