Как вызвать activity2 после activity1 в котлине?

Я хочу сначала выполнить login_activity, а затем такую ​​form_activity.

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // Check Login
    val intent = Intent(this, LoginActivity::class.java)
    startActivity(intent)

    // After login, call FormActivity
    val intent2 = Intent(this, FormActivity::class.java)
    startActivity(intent2)

}

Моя проблема в том, что если я запустил это, приложение напрямую откроет FormActivity, однако, если я закомментирую вызов FormActivity, тогда LoginActivity откроется успешно.

Мне нужно открыть FormActivity Только после успешного возврата LoginActivity.

ну просто поместите это второе намерение в метод onCreate для действия формы

Rizwan Atta 17.04.2018 17:20

если вы пытаетесь проверить, вошел ли ваш пользователь уже в систему или нет! вероятно, вам следует прочитать концепцию создания сеансов с использованием хранилища предпочтений

Rizwan Atta 17.04.2018 17:21

Затем вам нужно запустить действие формы после успешного входа в систему, а не сразу.

Srikar Reddy 17.04.2018 17:25
1
3
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужен startActivityForResult. Читайте здесь: https://developer.android.com/training/basics/intents/result.html

Здесь можно найти очень хороший пример: Как управлять startActivityForResult на Android?

Это правильный ответ, но он может быть более полезным на небольшом примере.

WoogieNoogie 17.04.2018 17:21

Добавлен пример ссылки.

Krzysztof Kubicki 17.04.2018 17:23
Ответ принят как подходящий

Вам следует использовать startActivityForResult(). По сравнению с startActivity(), startActivityForResult принимает дополнительный целочисленный аргумент в качестве кода запроса, который идентифицирует ваш запрос к действию. Вам также необходимо переопределить метод onActivityResult() для обработки вызванного завершения действия.

Пример запуска активности на результат:

static final int MY_REQUEST_CODE = 1;

public void foo(){
    Intent someIntent = new Intent(YOUR_INTENT_HERE); 
    startActivityForResult(someIntent, MY_REQUEST_CODE);
}

Обработайте результат

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
    if (requestCode == MY_REQUEST_CODE){
        bar();
    }
}

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

В Котлине:

companion object{
    private const val MY_REQUEST_CODE = 1;
}

fun foo(){
    val someIntent = Intent(YOUR_INTENT_HERE)
    startActivityForResult(someIntent, MY_RESULT_CODE)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?){
    if (requestCode == MY_REQUEST_CODE){
        bar()
    }
}

Для получения дополнительной информации: https://developer.android.com/training/basics/intents/result.html#ReceiveResult

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