如何在kotlin中的activity1之后调用activity2?

时间:2018-04-17 15:18:02

标签: android kotlin

我想先执行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会成功打开。

我需要的是在LoginActivity成功返回后打开FormActivity

2 个答案:

答案 0 :(得分:1)

您需要startActivityForResult。请在此处阅读:https://developer.android.com/training/basics/intents/result.html

可以在这里找到一个很好的例子:How to manage `startActivityForResult` on Android?

答案 1 :(得分:1)

您应该使用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的Intent来处理启动其他Activity的任何数据结果

在Kotlin:

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