23

假设我正在进行主要活动并开始一项新活动

MainActivity > NewActivity

然后从NewActivity我按后退键

MainActivity < NewActivity

MainActivity如果它在NewActivity关闭后显示,我想做一些事情,但不是在MainActivity正常运行时显示,例如在第一次运行应用程序时。有谁知道这是否可能?

4

5 回答 5

22
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        Log.d(this.getClass().getName(), "back button pressed");
    }
    return super.onKeyDown(keyCode, event);
}

@更新。如果你想在 NewActivity 完成时收到通知,你必须通过 startActivityForResult(Intent, requestCode) 来启动它。然后,您必须覆盖 MainActivity 上的 onActivityResult()。在这里检查requestcode参数,如果返回码等于提交码(当你启动childActivity时),放一些代码来做你的业务。

int MYCODE=1000;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Result OK.d.
    if (requestCode == MYCODE) {
        // do something good
    }
}
于 2012-06-25T02:06:58.757 回答
13

I try the below method to detect the back button pressed on the action bar in activity by the first method and the second one is used to detecting the mobile hardware button back or kill activity button.

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

@Override
public void onBackPressed() {
    setResult(RESULT_CANCELED);
    super.onBackPressed();
}
于 2016-06-23T12:00:20.493 回答
12

您可以覆盖 NewActivity 中的 onBackPressed() 方法,该方法将检测何时按下后退按钮。然后为了通知 MainActivity,您可以在包中发送一个布尔标志,以便 MainActivity 在 NewActivity 之后检测到它的打开。

在新活动中:

       @Override
       public void onBackPressed() {
                boolean fromNewActivity=true;

        Intent mainIntent = new Intent(view.getContext(), MainActivity.class);
        Bundle bundleObj = new Bundle();
        bundleObj.putString("fromNewActivity", Boolean.toString(fromNewActivity));
        mainIntent.putExtras(bundleObj);
        startActivityForResult(mainIntent, 0);
           }

在 onCreate() 方法的 MainActivity 中:

       Bundle extras = getIntent().getExtras();
       boolean fromNewActivity =Boolean.parseBoolean( extras.getString("fromNewActivity"));

现在您可以检查 MainActivity 是否在 NewActivity 之后打开。

于 2012-06-25T05:02:55.987 回答
7

几个想法:

  • 你可以在MainActivity它启动时设置一个标志NewActivity
  • 您可以调用startActivityForResultMainActivity安排NewActivity设置结果,完成后您将收到该MainActivity.onActivityResult()结果NewActivity
于 2012-06-25T02:04:43.383 回答
0

开始时,NewActivity您需要使用startActivityForResult并使用有效的requestId. 一旦完成,这些requestId将传回给您。onActivityResultNewActivity

于 2012-06-25T02:03:32.877 回答