Как перемещаться вперед между действиями, отбрасывая экран входа в систему из стека?

У меня есть приложение, которое, если я нахожусь на определенном экране, и пользователь пытается получить доступ к определенной части приложения, для которой требуется авторизация, перед продолжением переходит на экран входа в систему.

В настоящее время приложение работает, скажем, я на экране 3, но хочу перейти к экрану 4, но мне нужно сначала войти в систему, чтобы перейти к экрану 4. Появится экран входа в систему, и после входа в систему пользователь будет перенаправлен на экран. Мне нужно вернуться через шаги, чтобы вернуть экран, на котором они были.

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

То, что я пробовал, это вызвать финиш (); как только пользователь успешно вошел в систему, но все, что нужно сделать, это вернуть пользователя к экрану 3, заставляя его нажимать на кнопку, чтобы перейти к экрану 4, что, конечно, позволяет ему сейчас, потому что он вошел в систему.

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

Спасибо

РЕДАКТИРОВАТЬ: Название может вводить в заблуждение, я не мог придумать лучший способ переформулировать название. Если вы можете, пожалуйста, идти вперед и запросить редактирование

4 ответа

Решение

Сначала объявить

int SIGN_IN_REQUEST = 42;

Когда пользователь хочет перейти к экрану 4:

if (isSignedIn) {
  intent = new Intent(this, Screen4Activity.class);
  startActivity(intent);
} else {
  intent = new Intent(this, SignInActivity.class);
  startActivityForResult(intent, SIGN_IN_REQUEST);
}

Наконец, есть

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == SIGN_IN_REQUEST) {
      if (resultCode == Activity.RESULT_OK) {
        //User signed in, launch Screen4
        intent = new Intent(this, Screen4Activity.class);
        startActivity(intent);
      } else {
        //User cancelled the sign in, deal accordingly
      }
    }
}

А из вашей SignInActivity, если пользователь выполнил вход:

       setResult(RESULT_OK);
       finish();

Иначе:

       setResult(RESULT_CANCELED);
       finish();

У намерения может быть другой аргумент намерения

            Intent nextIntent=new Intent(A.this,B.class);
            Intent intent=new Intent(A.this,LoginActivity.class);
            intent.putExtra("nextIntent",nextIntent);

затем startActivity nextIntent при успешном входе в систему LoginActivity.

Готово будет в основном закончить текущую деятельность. Сначала вы должны начать действие, которое хотите запустить, а затем завершить текущее действие. Чтобы узнать, какая активность раздувается, вы можете передать ее в дополнение к вызывающей деятельности. Следующее действие необходимо начинать только после успешного входа в систему. Например

Intent intent = new Intent(getApplicationContext(), MyActivity.class);
    startActivity(intent);
    finish();

Вы можете использовать один хост и несколько фрагментов. Фрагмент входа будет вызывать активность, чтобы он мог принять решение о следующем фрагменте.

Другие вопросы по тегам