安卓:按一定顺序连续调用多个活动



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

实际上我想调用第一个子活动(

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

问题是应用程序一次执行所有意图,并且应该最后调用的活动首先出现在屏幕上。

这是代码:

@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);
        }
    }

我想要的是叫战争,回到主要活动,然后叫吞并,等等,最后应该叫体育馆。由于某种原因,主要活动的 onPause(( 不会被调用,并且所有意图都会立即执行,因此首先调用 Coliseum 而不是 War。

您可以使用

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
    }
}

您的方案的最佳情况是使用 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(业务逻辑(。因此,您可以对其他活动执行相同的操作。

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

  • http://www.survivingwithandroid.com/2012/09/passing-data-between-activities-2.html
  • https://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/

请记住,Android 中不保证每当您尝试通过意图启动活动时,它就是这样,并且打算启动新的活动;Android的本质是一次显示一个活动。

最新更新