Java 检查android中是否按下了后退键?

Java 检查android中是否按下了后退键?,java,android,back-button,Java,Android,Back Button,假设我正在进行我的主要活动,我开始了一项新的活动 MainActivity > NewActivity 然后从NewActivityI按下后退键 MainActivity < NewActivity MainActivity

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

MainActivity > NewActivity
然后从
NewActivity
I按下后退键

MainActivity < NewActivity
MainActivity

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

当您启动
NewActivity
时,您需要使用
startActivityForResult
并使用有效的
requestId
NewActivity
完成后,此类
requestId
将被传递回您的
onActivityResult

一些想法:

  • NewActivity
    启动时,您只需在
    MainActivity
    中设置一个标志即可
  • 您可以从
    MainActivity
    调用
    startActivityForResult
    ,并安排
    NewActivity
    设置结果,当
    NewActivity
    完成时,您将在
    MainActivity.onActivityResult()中收到该结果
@覆盖
公共布尔onKeyDown(int-keyCode,KeyEvent事件){
if((keyCode==KeyEvent.keyCode\u BACK)){
Log.d(this.getClass().getName(),“按下后退按钮”);
}
返回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
    }
}

您可以在NewActivity中重写onBackPressed()方法,该方法将在按下后退按钮时检测。然后,为了通知MainActivity,您可以在bundle中发送一个布尔标志,以便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中:


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

我尝试以下方法来检测第一种方法在activity中操作栏上按下的back按钮,第二种方法用于检测移动硬件按钮back或kill activity按钮

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

如果按下“后退”按钮,这不就是在听吗?如果您只想听“后退”按钮,请使用第一个剪断的代码。如果您按下“后退”按钮并且软键盘可见,则不会调用onKeyDown。
@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();
}