Android:返回上一个活动

Tro*_*roj 496 android android-intent android-activity

我想在Android应用程序上做一些简单的事情.怎么可能回到以前的活动.

我需要什么代码才能回到之前的活动

Abh*_*nav 470

Android活动存储在活动堆栈中.回到之前的活动可能意味着两件事.

  1. 您使用startActivityForResult从另一个活动中打开了新活动.在这种情况下,您只需从代码中调用finishActivity()函数,它就会将您带回到之前的活动.

  2. 跟踪活动堆栈.每当您使用intent启动一个新活动时,您都可以指定一个意图标记,如FLAG_ACTIVITY_REORDER_TO_FRONTFLAG_ACTIVITY_PREVIOUS_IS_TOP.您可以使用它在应用程序中的活动之间进行随机播放.虽然没有多用它们.看看这里的标志:http://developer.android.com/reference/android/content/Intent.html

正如评论中所提到的,如果活动是打开的,startActivity()那么可以用它关闭它finish().如果您希望使用"向上"按钮,则可以在onOptionsSelected(MenuItem item)方法中捕获该项,同时检查项目ID,android.R.id.homeR.id.home注释中提到的不同.

  • 或者如果您使用startActivity()打开活动,则可以使用finish()关闭(不需要传递任何参数) (230认同)
  • @RicNjesh在你的onOptionsItemSelected方法中,如果单击的menuitem具有id R.id.home,则调用finish().它将关闭当前活动并带您回到使用startActivity()启动它的活动 (4认同)
  • 你能说明你在哪里以及如何使用finish(),所以当用户按下向上按钮时,它会将它们带到之前的活动中 (3认同)
  • 你确定活动 1 在你完成活动 2 之前不会死吗? (2认同)

ada*_*amp 218

试试Activity#finish().这或多或少是默认情况下后退按钮的作用.

  • ```表示`finish()`是Activity类的非静态方法.它不是有效的Java,但它有助于解释如何使用该方法. (64认同)
  • 我相信他的意思是'this.finish();` (8认同)
  • @Benten将是`.`,即:`Activity.someStaticMethod()` (8认同)
  • 为什么 #?或者它是一个点? (2认同)
  • @ Tanis.7x是否有静态方法的指标? (2认同)

小智 78

只需点击完成()即可.它将带你到上一个活动.


Ata*_*CSE 67

只是这个

super.onBackPressed();
Run Code Online (Sandbox Code Playgroud)

  • 这是hackish.你不应该直接打电话.这是生命周期方法之一,应该由android系统调用. (17认同)
  • 此调用仅完成当前活动,因此它将显示最后一个活动可见。但是,如果没有先前的活动或同时被破坏,则应用程序可能会退出。 (3认同)

Dmi*_*nko 31

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Run Code Online (Sandbox Code Playgroud)

这将使您进入之前的活动,保持其堆栈并清除堆栈后的所有活动.

例如,如果堆栈是A-> B-> C-> D并且您使用此标志启动B,则堆栈将为A-> B


Bry*_*nny 19

你想控制后退按钮的行为吗?您可以通过两种方法之一覆盖后退按钮(转到特定活动).

适用于Android 1.6及以下版本:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您只支持Android 2.0或更高版本:

@Override
public void onBackPressed() {
    // do something on back.
    return;
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请访问:http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html


Aks*_*wal 19

只需调用这些方法即可完成当前活动或通过onBackPressed返回

finish();
Run Code Online (Sandbox Code Playgroud)

要么

onBackPressed();
Run Code Online (Sandbox Code Playgroud)


Ram*_* G. 13

如果你想去只是想去以前的活动使用

finish();
Run Code Online (Sandbox Code Playgroud)

要么

onBackPressed();
Run Code Online (Sandbox Code Playgroud)

如果你想进入第二项活动或以下使用以下活动:

intent = new Intent(MyFourthActivity.this , MySecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//Bundle is optional
Bundle bundle = new Bundle();
bundle.putString("MyValue1", val1);
intent.putExtras(bundle);
//end Bundle
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)


Tho*_*aux 11

如果您已正确设置具有活动父级的AndroidManifest.xml文件,则可以使用:

NavUtils.navigateUpFromSameTask(this);
Run Code Online (Sandbox Code Playgroud)

这是您的孩子活动.


Dar*_*huu 11

在onCLick()方法中添加它,它将返回到您之前的活动

完();

或者您可以使用它.它对我来说很完美

 @Override
  public boolean onOptionsItemSelected(MenuItem item) {
  int id = item.getItemId();

      if ( id == android.R.id.home ) {
         finish();
         return true;
       }

  return super.onOptionsItemSelected(item);
  }
Run Code Online (Sandbox Code Playgroud)


Lab*_*lan 7

您可以显式调用onBackPressed是最简单的方法.
请参阅返回上一个活动以获取详细信息


NoN*_*aMe 7

得到了同样的问题和

finish();  OR super.onBackPressed();
Run Code Online (Sandbox Code Playgroud)

我工作得很好,两者都一样,但没有运气 return


Alt*_*ain 6

使用intent(使用startActivitystartActivityForResult根据您的要求)启动第二个活动.现在,当用户按下后退按钮时,顶部的当前活动将被关闭,之前的活动将被显示.

现在让我们说你有两个活动,一个是选择一些设置,对于用户来说,就像语言,国家等,并选择它后,下一步按钮,用户点击进入登录表单(例如).现在如果登录失败,那么用户将登录登录活动,如果登录成功怎么办?

如果登录成功,则必须启动另一项活动.这意味着将启动第三个活动,并且仍然有两个活动正在运行.在这种情况下,使用起来会很好startActivityForResult.登录成功后,将OK数据发送回第一个活动并关闭登录活动.现在,当收到数据时,然后启动第三个活动并使用完成关闭第一个活动.


nik*_*kki 5

你可以试试这个:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

        finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)


小智 5

默认情况下,所有新活动/意图都具有后退/前一行为,除非您finish()在调用活动上编码了 a 。


小智 5

@Override
public void onBackPressed() {
    super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)

如果你想点击按钮返回然后简单地把

bbsubmit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});
Run Code Online (Sandbox Code Playgroud)


Muh*_*sil 5

尝试这是因为您必须按后退按钮

finish();
onBackPressed();
Run Code Online (Sandbox Code Playgroud)