按下返回按钮会调用onCreate方法(安卓)

7

Activity A启动Activity B。在Activity B中,我有这个方法:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        // This ID represents the Home or Up button. In the case of this
        // activity, the Up button is shown. Use NavUtils to allow users
        // to navigate up one level in the application structure. For
        // more details, see the Navigation pattern on Android Design:
        //
        // http://developer.android.com/design/patterns/navigation.html#up-vs-back
        //
        NavUtils.navigateUpTo(this, new Intent(this,
                ArticleListActivity.class));
        return true;
    }
    return super.onOptionsItemSelected(item);
}

当我按下主页按钮时,它会带我到Activity A,这是应该的。然而,onCreate又被调用了一次。我不想要这种行为。
我猜测这是因为此实现在导航堆栈中使用新的Intent到先前的项。虽然这只是我从Eclipse创建双面板项目时获得的代码。我在Stack Overflow上查看了一些东西,尽管看起来使用Intent返回导致了这种行为,但我不明白Google为什么会在默认模板中提供这个。
当回到Activity A时,我该如何更改此调用,以便不再调用onCreate?

1
你可以直接调用 onBackPressed()。 - Rajesh Mikkilineni
请完成此Activity,即调用this.finish(); - Ali
可能是从另一个活动返回到MainActivity的重复问题。 - Gabe
4个回答

8
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
       finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

只需完成当前活动,它将带您回到上一个活动。如果您的先前活动是活动A,则只需使用finish()方法而不是创建intent对象。


谢谢,伙计。作为iOS开发者,我一直在寻求简单而无缝地回到主表的导航方式。这个方法非常出色! - Emastmagy MastMagy

3

正如 @Rajesh 指出的那样,您需要调用 onBackPressed()

您的代码检测到了主页按钮的按下,并创建了一个新的 ArticleListActivity 类。然而,您不希望创建一个新类,而只想回到您已经创建的类/活动中。所以改用 onBackPressed()


0

您可以尝试在清单文件中设置启动模式,因为父活动可以从堆栈中弹出。

android:launchMode="singleTop"

0

这样,onCreate() 不会再次被调用。

@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接