【发布时间】:2014-03-04 20:57:48
【问题描述】:
我有一个相对简单的 Android 应用程序,其中一个 Activity 显示项目列表,另一个显示所选项目的详细信息。我启动列表活动,这是我最顶层的活动(使用FLAG_ACTIVITY_CLEAR_TOP 清除调用它的登录活动):
Intent intent = new Intent(this, ListInstancesActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
在该活动中,我对正在选择的项目采取行动:
Intent detailIntent = new Intent(this, ShowInstanceActivity.class);
detailIntent.putExtra(ShowInstanceFragment.ARG_ITEM_ID, id);
startActivity(detailIntent);
一切正常,如果我使用软键“返回”按钮,那么我将返回ListInstancesActivity,正如我所期望的那样。但是,如果我按下操作栏上的后退/向上按钮,则它会破坏并重新创建 ListInstancesActivity。这很糟糕,因为这样做的计算成本相对较高。
如何使操作栏的行为方式与软键相同,只是返回到上一个活动而不是破坏它。
需要注意的是,我使用的是actionbar的支持库版本。
我AndroidManifest.xml的相关部分是
<activity
android:name=".agenda.ListInstancesActivity"
android:label="@string/list_instances_activity_title">
</activity>
<activity
android:name=".agenda.ShowInstanceActivity"
android:label="@string/show_instance_activity_title"
android:parentActivityName=".agenda.ListInstancesActivity">
</activity>
【问题讨论】:
-
CLEAR_TOP 与列表活动之前的登录活动无关。它指出列表活动之后的所有内容都应该完成。考虑启动 LOGIN、LIST、DETAIL、LIST、DETAIL。使用 CLEAR_TOP 标志启动 LIST 活动后,堆栈将如下所示:LOGIN,LIST。 LIST 活动将从头开始重新创建。如果您另外指定 SINGLE_TOP,则 LIST 活动将被保留并接收 onNewIntent(Intent) 回调。
标签: android android-actionbar android-actionbar-compat