Как выстроить нужную логику переходов между activity и нажатия на кнопку back?

Рейтинг: 3Ответов: 1Опубликовано: 18.12.2014

Здравствуйте!
Как говорится:

"Повторение — мать учения!"

В сотый раз возникает вот такой вопрос.
Есть несколько активити (заменить на фрагменты не предлагать), нужно организовать переходы между ними.

Т.е. либо мы заходим после авторизации сразу на главный экран закрытой части (MainActivtiy), либо идем создавать код доступа (который позволяет не вводить каждый раз логин и пароль). НО мы уже авторизовались!

Я знаю несколько способов решения подобной задачи:

android:parentActivityName в манифесте

startActivityForResult() с последующим onActivityResult().

Ну и onBackPressed().

Только постоянно получается путаница - какая-то активити сохраняется или переходы нажатием кнопки назад закольцовываются... finish() вызываю всегда, когда обрабатываю нажатие назад или когда setResult(RESULT_CANCELLED);.

Картинка:

alt text

Синий и зеленый идеальный сценарий, интересует сценарий красными стрелками сделаный. Проще говоря, когда мы прошли авторизацию и перехотели делать код доступа, мы должны перейти на экран MainActivity.

Сценарий:

Начало, переходим к авторизации.

Авторизовались.
Пошли создавать код доступа codeEnter.

Перешли на следующий экран preConf.

Вернулись на codeEnter.

Вернулись на LoginActivity.

Вернулись на StartActivity.

Важно, чтобы один и тот же сценарий выполнялся по нажатию на кнопку назад (принципиально), actionBar забудем на время.

Ответы

▲ 1Принят

Если я Вас, @Garf1eld, правильно понял, то Вам нужен способ верного перехода на MainActivity, если пользователь авторизовался.

Я могу предложить только проверку:

  • онлайн -> послать запрос на сервак и сверить ответ локально.

  • оффлайн (не знаю назначение оффлайн авторизации на смартфоне, но все же) -> после успешной авторизации сохранить в SharedPreferences значение ключа boolean enter = true. Если не авторизован, то enter = false, если выходит из аккаунта, то присвоить enter = false.

Проверка на успешную авторизацию. Если "да", то на MainActivity.

// код для **офлайн** версии.
if (enter == true) {
    // авторизован, переходим к приложению
    startActivity(new Intent(StartActivity.this, MainActivity.class);
} else {
    // не авторизован, переходим к активности авторизации
    startActivity(new Intent(StartActivity.this, AutorizationActivity.class)
}

UPD Можно попробовать кастомизировать onBackPressed();

@Override
public void onBackPressed() {
   startActivity(new Intent(ТЕКУЩАЯ_АКТИВНОСТЬ.this, ППВСА.class));
   // ППВСА - ПРЕДЫДУЩАЯ ПО ВАШЕЙ СТРУКТУРЕ АКТИВНОСТЬ
   // задать кастомизацию в каждом классе
}