Android:按特定顺序连续调用多个活动

时间:2017-05-26 20:16:52

标签: android android-intent android-activity

有人可以解释如何按特定顺序从一个活动中调用多个活动吗?

实际上我想调用第一个子活动(如果相应的条件为真),等待它完成,然后调用第二个子活动(如果条件允许),也等待它完成等等。最后,应用程序必须转到另一个活动并关闭调用子活动的活动。

问题是应用程序一次执行所有意图,并且最初应该调用的活动最初显示在屏幕上。

以下是代码:

@Override
    public void onResume()
    {
        super.onResume();

        if(allocated)
        {
            super.onResume();
            if (warEvent)
            {
                Intent intent = new Intent(this, War.class);
                warEvent = false;
                startActivity(intent);
            }

            if (annexEvent)
            {
                Intent intent = new Intent(this, Annexation.class);
                annexEvent = false;
                startActivity(intent);
            }

            if (heirEvent)
            {
                Intent intent = new Intent(this, Dynasty.class);
                heirEvent = false;
                startActivity(intent);
            }

            if (diseaseEvent)
            {
                Intent intent = new Intent(this, Disease.class);
                diseaseEvent = false;
                startActivity(intent);
            }

            if (corruptEvent)
            {
                Intent intent = new Intent(this, Corruption.class);
                corruptEvent = false;
                startActivity(intent);

            }

            if (catchEvent)
            {
                Intent intent = new Intent(this, CatchCorrupt.class);
                catchEvent = false;
                startActivity(intent);
            }

            Intent intent = new Intent(this, Coliseum.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    }

我想要的是调用War,返回主要活动,然后调用Annexation,依此类推,最后应该调用Coliseum。由于某种原因,主要活动的onPause()没有被调用,并且所有意图都被立即执行,因此首先调用Coliseum而不是War。

3 个答案:

答案 0 :(得分:0)

您的方案的最佳情况是使用 startActivityForResult 作为@nash提及。

您可以通过调用 startActivityForResult “A”来启动活动“B”,并且可以设置完成该活动结果确定在活动“B”中,如下所示

Intent in = new Intent ();
            in.putExtra (LATITUDE, lat);
            in.putExtra (LONGITUDE, lng);
            setResult (RESULT_OK, in);
            finish ();

然后在活动“A”的onActivityResult中进一步接收完成调用,然后您就可以应用BI(业务逻辑)。因此,您可以对其他活动也这样做。

答案 1 :(得分:0)

我的建议是在新活动中传递一个标志,并在每个活动结束时检查要满足的条件,以便您可以开始新活动或返回。您可以使用Intents标志

自定义活动

请记住,Android中没有任何保证,无论何时尝试通过Intent启动Activity,都只是这样,并且意图启动一个新的Activity; Android的性质是一次显示一个Activity。

答案 2 :(得分:0)

您可以使用startActivityForResult框架执行此操作。首先声明一个键:

public static final String KEY_LAST_STARTED_ACTIVITY = "last-started-activty";

然后开始你的第一个Activity(如果onResume()是开始Activity的最理想的地方,则重新思考。它的调用次数比你想象的要多,所以请阅读以下文档:即):

@Override
    public void onResume()
    {
        super.onResume();

        if(allocated)
        {
            if (warEvent)
            {
                Intent intent = new Intent(this, War.class);
                warEvent = false;
                startActivityForResult(intent);
            }
        }
    }
}

在您的War活动setResult()中,以便在主Activity中,您可以确定哪个是最后一个Activity,并决定下一步开始:

Intent intent = new Intent();
intent.putString(MainActivity.KEY_LAST_STARTED_ACTIVITY, War.class.getSimpleName();
setResult(RESULT_OK, intent);
// finish() immediately or sometime later

在您的主要Activity onActivityResult()中,使用结果来确定下一步的内容:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (data.getStringExtra(KEY_LAST_STARTED_ACTIVITY)) {
        case "War":
            // Last activity that was started was War, start the next one
            if (annexEvent)
            {
                Intent intent = new Intent(this, Annexation.class);
                annexEvent = false;
                startActivityForResult(intent);
            }
            break;
        // ... Add other cases for other activities

    }
}