Как управлять бэкстеком и правильно перемещаться

У меня есть 3 действия в приложении, скажем, A, B и C. Из A я могу перейти к B или C. Таким образом, возможный рабочий процесс имеет два пути:

  1. A > > B >> C (принимает ввод, а затем начинает расчет по выбранной ранее формуле в B)

  2. A >> C>> B и после выбора формулы возвращается к C

Проблема

теперь в случае 1. Если пользователь перемещается по показанному пути, A>B>C, я хочу, чтобы пользователь возвращался назад таким же образом, я имею в виду, что при обратном нажатии B он должен перейти к C, а затем к A:

но во втором случае я хочу, чтобы пользователь перешел к A из C, я имею в виду, что открытие B в C не должно переходить к B, когда пользователь нажимает назад. другими словами, если пользователь перешел, используя мой второй случай, он должен перейти к A, а не к C.

как я могу справиться с этим в этом сценарии.


person stacy queen    schedule 27.04.2015    source источник


Ответы (4)


В принципе, не переопределяйте обратное нажатие в своей активности, позвольте Android обрабатывать обратное действие за вас.

В первом случае использования: при переходе от MainActivity-->ActivityFormula-->ActivityMath. Здесь, когда вы нажимаете назад, последовательность будет полностью обратной

Во втором случае использования: когда вы переходите от MainActivity-->ActivityMath , не держите ActivityFormula в стеке, поэтому обратное нажатие не перейдет к ActivityFormula.

person KOTIOS    schedule 27.04.2015
comment
как я могу не сохранить стек в случае 2 и как приложение узнает, что это случай 2 - person stacy queen; 27.04.2015

@ case 1, если вы сами не закрыли A и B, это будет работать так, как вы хотите. Ничего не переопределяйте.

@ случай 2, вы можете просто finish() C, как только запустите B. Напишите следующий код в своем ActivityC:

Intent intent = new Intent(this, ActivityB.class);
startActivity(intent);
finish();
person Sufian    schedule 27.04.2015
comment
похоже вы не читали мой вопрос или не правильно его поняли - person stacy queen; 27.04.2015
comment
Ах. Я снова прочитал. По 2-му случаю он должен прийти к A, а не к C, вы хотите полностью пропустить B? Или вы хотите открыть его, когда вы снова нажмете (на A)? - person Sufian; 27.04.2015

Первый вариант использования: намерение от ActivityA-->ActivityB-->ActivityC. Здесь, когда вы нажимаете назад, последовательность будет полностью обратной

Второй вариант использования: когда nevigate ActivityA-->ActivityC и используйте finish(); при переходе 'ActivityC'-->'ActivityB'

и в ActivityB Intent до ActivityA с помощью

 @Override
    public void onBackPressed() {
        Intent i = new Intent(ActivityC.this , ActivityB.class);
        startActivity(i);
         finish(); 
    }

Дайте мне знать.. Если решение все еще не найдено

person Subhalaxmi    schedule 27.04.2015
comment
При обратном нажатии в действии B создастся неоднозначное состояние. Скажем, когда пользователь переходит от действия C к действию B, а в действии B он хотел нажать кнопку «Назад», чтобы вернуться к действию C, но это приведет его к действию A, которое не требуется. - person stacy queen; 28.04.2015

Это стандартное поведение Android. Нажатие кнопки НАЗАД (или вызов finish()) вернет пользователя к предыдущему Activity в стеке. Вам не нужно делать ничего особенного, чтобы получить такое поведение. Это работает так по умолчанию.

person David Wasser    schedule 27.04.2015