ActionBar'up'按钮销毁父活动,'back'不会

jgm*_*jgm 49 android android-actionbar android-actionbar-compat

我有一个相对简单的Android应用程序,其中一个Activity显示项目列表,另一个显示所选项目的详细信息.我启动list活动,这是我最重要的活动(FLAG_ACTIVITY_CLEAR_TOP用于清除调用它的登录活动):

Intent intent = new Intent(this, ListInstancesActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
Run Code Online (Sandbox Code Playgroud)

并且从该活动中我对选择的项目采取行动:

Intent detailIntent = new Intent(this, ShowInstanceActivity.class);
detailIntent.putExtra(ShowInstanceFragment.ARG_ITEM_ID, id);
startActivity(detailIntent);
Run Code Online (Sandbox Code Playgroud)

一切正常,如果我使用软键"后退"按钮,那么ListInstancesActivity我会按照我的预期返回.但是,如果我按下操作栏上的后退/上移按钮,它会破坏并重新创建ListInstancesActivity.这很糟糕,因为这样做计算成本相对较高.

如何使操作栏的行为与软键相同,只返回上一个活动而不是销毁它.

应该注意的是,我正在使用动作栏的支持库版本.

我的相关部分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>
Run Code Online (Sandbox Code Playgroud)

vik*_*ogs 97

在android manifest.xml中为父活动标签添加以下属性.

android:launchMode="singleTop"
Run Code Online (Sandbox Code Playgroud)

参考:http://developer.android.com/guide/topics/manifest/activity-element.html

请参阅类似的问题: 如何正确返回父活动?

  • 这很棒!有谁知道为什么这是android上的默认行为,它真的没有意义.为什么要保持对记忆的活动,如果你要在用户要求时将其销毁D: (6认同)
  • 行动的完美答案吧问题...... :).谢谢 (3认同)

Aas*_*hir 31

您可以覆盖操作栏按钮应该执行的操作:

public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {

case android.R.id.home:
    onBackPressed();
    return true;
}

return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)

并重新创建后退按钮效果.

  • **下面的@vikki_logs提供了更好的答案**.后退按钮和"向上"具有不同的行为,它们不应该做同样的事情.如果我导航到详细活动`ShowInstanceActivity`然后回击应该带我回到_my_应用程序或我之前的位置.使用向上按钮可以在_your_应用程序方面向后导航. (8认同)