有人可以解释如何按特定顺序从一个活动中调用多个活动吗?
实际上我想调用第一个子活动(如果相应的条件为真),等待它完成,然后调用第二个子活动(如果条件允许),也等待它完成等等。最后,应用程序必须转到另一个活动并关闭调用子活动的活动。
问题是应用程序一次执行所有意图,并且最初应该调用的活动最初显示在屏幕上。
以下是代码:
@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。
答案 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
}
}