31

我正在使用操作栏,它是“向上”按钮,可以从详细活动返回到主要活动,效果很好。同样,用户可以按下系统的“返回”按钮返回到主活动。

在我的主要活动中,onCreate()从互联网下载数据以在应用启动时显示。我注意到,当我使用操作栏“向上”按钮从详细信息转到主要活动时,onCreate()正在运行,重新下载数据。但是onCreate()当我使用系统“后退”按钮时没有运行,因此立即显示主活动视图。

我在详细活动中用于实现“向上”按钮的代码是:

switch (item.getItemId()) {
   case android.R.id.home:
      Intent intent = new Intent(this, MainActivity.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(intent);
      return true;

我希望“向上”按钮的行为类似于“后退”按钮而不是重新运行onCreate()。但我不确定如何实现这一点,或者“后退”按钮实现哪个代码路径以返回主要活动。

谢谢!

4

6 回答 6

49

无需开始一个全新的活动,只需完成您所在的详细信息活动

switch (item.getItemId()) {
   case android.R.id.home:
      finish();
      return true;

然后您将返回到活动堆栈上的上一个活动(您的主要活动)并且不应调用 onCreate

于 2012-04-25T16:52:05.540 回答
10

如果您希望 Up 完全执行 Back 所做的操作,您可以这样做:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}

请注意,默认实现onBackPressed()只是调用finish(),但onBackPressed可以被覆盖。

于 2014-10-01T23:43:55.740 回答
8

我认为可以在这篇文章中找到更好的解决方案。

调用finish()在特定情况下有效,但可能并不总是产生文档中描述的行为,例如:

在此处输入图像描述

通过调用

Intent intent = NavUtils.getParentActivityIntent(this); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
NavUtils.navigateUpTo(this, intent);

您将以离开它的状态返回父活动。如果你有一个扁平的应用程序结构,它仍然会像返回按钮一样。

于 2014-05-03T02:38:40.183 回答
0

对于真正的“家庭”功能,您应该在“应用程序/活动/重新排序活动”下查看 api 演示。

原因:如果你有这样的东西:activity1->activity2->activity3,现在你希望通过按操作栏上的主页按钮进入activity1?

于 2012-04-25T17:16:52.523 回答
0

我相信最简单的方法是覆盖添加标志“Intent.FLAG_ACTIVITY_CLEAR_TOP”的详细活动的“getParentActivityIntent”方法:

@Nullable
@Override
public Intent getParentActivityIntent() {
    Intent intent = super.getParentActivityIntent();
    if (intent != null) {
        return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    }
    return intent;
}
于 2016-05-26T14:51:58.140 回答
0

还有另一种解决方案可供某人使用。当用户按下 Back 和 ActionbarBack 按钮时,我有同样的双重行为。我对 Back btn 行为很好。我不希望重新创建活动。所以我覆盖了这个方法

     @Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

对我来说很好

于 2017-05-23T15:32:15.247 回答