在安卓系统中如何检测返回键是否被按下?

26

假设我正在我的主活动中并启动了一个新活动

MainActivity > NewActivity

我从NewActivity中按下返回键。

MainActivity < NewActivity

我想让MainActivityNewActivity关闭后,如果正在显示,则执行某些操作,但不要在正常运行MainActivity(例如首次运行应用程序)时执行。 有人知道这是否可能吗?

5个回答

23
@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()方法。这里检查请求代码参数,如果返回的代码等于提交代码(当你启动子活动时),则放置一些代码来执行你的业务逻辑。

int MYCODE=1000;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Result OK.d.
    if (requestCode == MYCODE) {
        // do something good
    }
}

那样做只会监听后退按钮被按下的情况吗? - William L.
如果您只想监听返回按钮,请使用第一个代码片段。 - Nguyen Minh Binh
如果您按下返回按钮并且软键盘可见,则不会调用onKeyDown函数。 - Tayyab Mazhar

14

我尝试了以下两种方法来检测活动栏上的返回按钮,第一种方法用于此,第二种方法用于检测移动设备硬件上的返回或关闭活动按钮。

@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();
}

12

你可以在NewActivity中重写onBackPressed()方法,这将检测到返回按钮被按下时的情况。然后,为了通知MainActivity,您可以在Bundle中发送一个布尔标志,以便MainActivity在打开NewActivity后检测到它。

在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);
           }

在MainActivity的onCreate()方法中:

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

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


8

有一些想法:

  • 当启动NewActivity时,您可以在MainActivity中设置一个标志。
  • 您可以从MainActivity调用startActivityForResult,并安排NewActivity设置结果,在NewActivity完成时,您将在MainActivity.onActivityResult()中接收到该结果。

0

当您启动NewActivity时,需要使用startActivityForResult并使用有效的requestId。这样的requestId将在NewActivity完成后通过onActivityResult传递回给您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接