按后退按钮调用onCreate(Android)

时间:2014-08-05 06:04:26

标签: android android-intent android-activity

活动A开始活动B.在活动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);
}

当我按下主页按钮时,它会将我带到活动A。但是,onCreate再次被调用。我不想要这种行为。

我猜测它,因为此实现使用新的Intent到导航堆栈中的上一个项目。这只是我在创建双窗格项目时从Eclipse获得的代码。我查看了堆栈溢出,虽然似乎使用Intent返回导致此行为,但我不明白为什么Google会在默认模板中提供此行为。

我应该如何以不同的方式进行此调用,以便在返回活动A时不再调用onCreate?

4 个答案:

答案 0 :(得分: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();方法而不是创建意图对象

答案 1 :(得分:3)

正如@Rajesh所指出,你需要调用 onBackPressed()

您的代码会检测到按下主页按钮并创建一个新的 ArticleListActivity 类。但是,您不希望创建一个新类,只想返回已创建的类/活动。所以请改用 onBackPressed()

答案 2 :(得分:0)

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

firstpart, secondpart = s[:len(s)/2], s[len(s)/2:]

答案 3 :(得分:0)

通过这种方式,不会再次调用onCreate()。

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