Android Actionbar Up按钮与系统后退按钮

时间:2012-04-25 16:48:22

标签: android android-actionbar

我正在使用Actionbar和它的“向上”按钮从详细活动返回到主要活动,这很好。同样,用户可以按系统“返回”按钮返回主活动。

在我的主要活动中,onCreate()数据从互联网上下载,以便在应用开始时显示。我注意到当我使用Actionbar“向上”按钮从详细信息转到主要活动时,运行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()。但是我不确定如何实现这一点,或者“后退”按钮实现哪些代码路径以返回主活动。

谢谢!

6 个答案:

答案 0 :(得分:49)

而不是开始一个全新的活动,只需完成您所在的详细活动

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

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

答案 1 :(得分:9)

如果你想完全按照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

答案 2 :(得分:8)

我认为可以在this post中找到更好的解决方案。

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

enter image description here

致电

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

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

答案 3 :(得分:0)

真正的家庭"功能,你应该看到api演示,在"应用程序/活动/重新排序活动"

原因:如果您有类似这样的内容:activity1-> activity2-> activity3,现在您希望通过按操作栏上的主页按钮转到activity1?

答案 4 :(得分:0)

我认为最简单的方法是覆盖" getParentActivityIntent"详细活动的方法添加标志" Intent.FLAG_ACTIVITY_CLEAR_TOP":

@Nullable
@Override
public Intent getParentActivityIntent() {
    Intent intent = super.getParentActivityIntent();
    if (intent != null) {
        return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    }
    return intent;
}

答案 5 :(得分:0)

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

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

适合我的工作