onBack нажал, чтобы скрыть не уничтожить активность - PullRequest
20 голосов
/ 06 мая 2011

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

public void onBackPressed() {
    return;             
}

Моя цель - скрыть действие, однако, не завершая его, как это сделатьсобытие onBackPressed?

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

любая помощь приветствуется!

Ответы [ 4 ]

53 голосов
/ 06 мая 2011

Если вы хотите имитировать кнопку «Домой» для определенных действий, просто сделайте это:

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

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

Более подробную информацию об этом можно посмотреть здесь.: Переопределить кнопку «Назад», чтобы она действовала как домашняя кнопка

16 голосов
/ 20 мая 2014

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

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

2-й метод:

@Override
public void onBackPressed() {
   moveTaskToBack(true);
}

А если вы хотите перейти к предыдущему действию без разрушения текущего:

@Override
public void onBackPressed() {
    startActivity(new Intent(CurrentActivity.this, DestinationActivity.class);
}

А теперь из любого действия, если вы хотите открыть действие, которое находится в фоновом режиме.Я называю 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: Удалить все действия сверху

5 голосов
/ 23 октября 2013

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

1 голос
/ 06 мая 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...