我有一个应用程序,比如说,它有活动a、B&C.B可以由A启动,也可以由任何其他应用程序的活动启动。但是C只能由B启动。在按下C时,用户导航到B(这是可以的),但我在C上有一个按钮,按下该按钮,用户应该导航到a或任何其他启动B的应用程序的活动。
要从堆栈中清除B
并返回到上一个"活动",请执行以下操作:
在C
中,使用EXTRA:启动B
Intent intent = new Intent(this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("finish", true);
startActivity(intent);
在这里使用CLEAR_TOP和SINGLE_TOP可以确保返回到B
的现有实例,而不是创建新实例。
在B
中,按如下方式覆盖onNewIntent()
:
@Override
protected void onNewIntent(Intent intent) {
if (intent.hasExtra("finished")) {
// Wants to finish this Activity to return to the previous one
finish();
}
}
注意:只有当B
在启动C
时仍在"活动"堆栈中时(即:启动C
时不调用finish()
),此操作才有效。
一种替代方案是让B
使用startActivityForResult()
来启动C
。在这种情况下,C
可以返回信息(在resultCode
或返回的Intent
中),该信息将允许B
确定它是否应该完成。