如何恢复活动,而不是重新启动,并且#34; up"来自行动吧

时间:2014-02-15 23:54:54

标签: android android-actionbar android-navigation

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

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

<小时/> 现在,我在Activity B。在Activity B的on create方法中,我启用了向上按钮。

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我点击操作栏中的向上按钮,如下所示:enter image description here

现在的问题是,当我点击“向上按钮”时,它会回到Activity A,这很好,但重新启动它。怎么能让它停止重启?我只想要恢复

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

我希望我的活动能够恢复,因为在该活动中,我在线下载了一些字符串,所以当用户来自活动B - &gt;时,我不希望它继续下载数据。活动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 [答案] 好的,这是非常意外的,但在我的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>

The explanation to this is given here

2 个答案:

答案 0 :(得分:55)

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

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

基本上,总结一下android将始终重新创建活动,除非你不用

指定它
android:launchMode="singleTop"

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

对于其他任何人,如果你觉得这个有用,请在网址上代替我的答案。

答案 1 :(得分:0)

您也可以以编程方式获得相同的结果

Intent upIntent = NavUtils.getParentActivityIntent(this);
upIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, upIntent);