Если вы хотите эмулировать поведение браузера, вам следует просто разрешить Android создавать новые экземпляры действий, которые он будет выполнять.Затем пользователь может нажать НАЗАД, чтобы вернуться назад по списку действий.
Вы не можете повторно использовать существующие экземпляры и переставлять их, сохраняя при этом обратный стек, потому что, когда Android перемещает действие из любого места в стекена передний план (который вы можете сделать, используя FLAG_ACTIVITY_REORDER_TO_FRONT
), он удаляет его с того места, где он находился в заднем стеке.
Если вы действительно хотите повторно использовать существующие экземпляры и поддерживать задний стек, вам придется реализоватьэто самостоятельно:
Создайте переменную static ArrayList<Class> stack
, которую вы используете в качестве стека, чтобы запомнить, какой Activity
был использован в какой момент в навигации.Каждый раз, когда вы запускаете Activity
, вы должны использовать startActivity()
и убедиться, что вы установили FLAG_ACTIVITY_REORDER_TO_FRONT
, чтобы существующий экземпляр был перемещен вперед.Когда вы звоните startActivity
() you must also push the
Class instance of the
Activity` в свой стек.Это позволяет вам отслеживать, какие действия были запущены и в каком порядке.Это работает все хорошо, идти вперед.Теперь сложная часть возникает, когда пользователь нажимает НАЗАД.
Переопределить onBackPressed()
в каждом Activity
.Когда вызывается onBackPressed()
, сделайте это:
// pop my Activity off the stack
Class myClass = stack.remove(stack.size() - 1);
// Check if there are any more instances of my Activity in the stack
// Don't finish this instance if the instance exists in the stack
if (!stack.contains(myClass)) {
// There are no more instances of my Activity in the stack, so
// finish this instance
finish();
// Check if this is the root Activity, if so we are done!
if (stack.size() == 0) {
return;
}
}
// Get the Class representing the previous Activity from the top of the stack
Class activityClass = stack.get(stack.size() - 1);
// Launch that Activity
Intent launchIntent = new Intent(this, activityClass);
launchIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(launchIntent);
Это вытолкнет текущий Activity
из стека, завершите Activity
, если в стеке его больше нет, получитепредыдущий Activity
с вершины стека и запустите его, выводя его на фронт.Это дает иллюзию, которую вы ищете.