Использование предыдущей активности вместо запуска новой - PullRequest
0 голосов
/ 20 сентября 2018

можно использовать предыдущее текущее действие вместо запуска нового, не затрагивая задний стек?

например, действие A -> B -> C -> A Я хочу добиться того, чтобы системаиспользуйте экземпляр Activity A без запуска нового и без воздействия на задний стек.

, поэтому, когда пользователь нажимает кнопку Back, он перемещается по первоначальному пути, и последнее действие будет A, а не B, используя просто singleTop /Флаг ReorderToFront: я смогу использовать исходное действие, но потеряю задний стек

Я хочу получить «браузерный опыт», поэтому каждый раз, когда пользователь нажимает назад, он возвращается на свою предыдущую страницуслучай может быть гораздо более сложным, чем, например,

A -> B -> C -> A -> B -> B -> C -> D -> A и т. д. ...

1 Ответ

0 голосов
/ 20 сентября 2018

Если вы хотите эмулировать поведение браузера, вам следует просто разрешить 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 с вершины стека и запустите его, выводя его на фронт.Это дает иллюзию, которую вы ищете.

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