41

我有两个活动。说Activity AActivity B
Activity A我单击一个按钮启动Activity B这是我用于此的代码:

Intent intent = new Intent(this, ActivityB.class);
this.startActivity(intent);


现在在这一点上,我在Activity B。在 on create 方法上Activity B,我启用了向上按钮。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_news);

    getActionBar().setDisplayHomeAsUpEnabled(true); //Here//
}

在“向上”按钮的事件句柄上,我有以下代码:

public boolean onOptionsItemSelected(MenuItem item){
     switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            NavUtils.navigateUpFromSameTask(this);
        default:
            return super.onOptionsItemSelected(item);
    }
}


现在我决定回到Activity A我点击操作栏中的向上按钮,如下所示:在此处输入图像描述

现在的问题是,当我单击“向上按钮”时,它会回到Activity A正常状态,但会重新启动它。如何让它停止重新启动?我只是想让它恢复

当我使用我的硬件后退按钮时,它按预期工作。即它去Activity A并恢复它而不是重新启动它。

我希望我的活动恢复,因为在该活动中,我在线下载了一些字符串,所以当用户从活动 B -> 活动 A开始时,我不希望它继续重新下载数据


编辑我的清单文件Activity B部分如下所示:

<activity
    android:name="com.example.android.ActivityB"
    android:label="@string/title_activity_view_news"
    android:parentActivityName="com.example.android.ActivityA">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.android.ActivityA" />
</activity>


编辑 2 [Answer] 好的,这是非常出乎意料的,但在我的 AndroidManifest.xml 中,在 Activity A 部分中,我必须添加以下行衬里。android:launchMode="singleTop"所以它现在看起来像这样:

<activity
    android:name="com.example.android.ActivityA"
    android:label="@string/app_name" 
    android:launchMode="singleTop"> //**HERE**//
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

对此的解释在这里给出

4

2 回答 2

57

应该添加为答案而不是评论..但是在这里你可以接受,如果你愿意,其他人可以在必要时看到。

https://stackoverflow.com/a/16147110/3286163

基本上,总结 android 将始终重新创建活动,除非您指定它不使用

android:launchMode="singleTop"

注意:如果返回的活动不在参考中提到的返回堆栈的顶部,它将不起作用。

对于其他任何人,如果您觉得这很有用,请在 url 中而不是我的答案中投票。

于 2014-02-16T00:44:28.227 回答
0

您也可以通过编程实现相同的结果

Intent upIntent = NavUtils.getParentActivityIntent(this);
upIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, upIntent);
于 2015-08-24T10:13:27.957 回答