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