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

Wil*_* L. 18 java android back-button

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

MainActivity > NewActivity
Run Code Online (Sandbox Code Playgroud)

NewActivity我按后退键

MainActivity < NewActivity
Run Code Online (Sandbox Code Playgroud)

我希望MainActivityNewActivity关闭后显示某些内容,但在MainActivity正常运行时(例如首次运行应用程序时)则不显示.有谁知道这是否可能?

Ngu*_*inh 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);
}
Run Code Online (Sandbox Code Playgroud)

@Update.如果您希望在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
    }
}
Run Code Online (Sandbox Code Playgroud)


sar*_*nan 13

我尝试下面的方法检测按压由第一方法,第二个在活动操作栏上的返回按钮被用来检测移动硬件按钮背部或杀死活性按钮.

@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();
}
Run Code Online (Sandbox Code Playgroud)


Yog*_*ani 9

您可以在NewActivity中覆盖onBackPressed()方法,该方法将检测何时按下后退按钮.然后,为了通知MainActivity,您可以在一个包中发送一个布尔标志,以便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);
           }
Run Code Online (Sandbox Code Playgroud)

在onCreate()方法的MainActivity中:

       Bundle extras = getIntent().getExtras();
       boolean fromNewActivity =Boolean.parseBoolean( extras.getString("fromNewActivity"));
Run Code Online (Sandbox Code Playgroud)

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


Ted*_*opp 8

一些想法:

  • 你可以在MainActivity它启动时设置一个标志NewActivity.
  • 你可以打电话startActivityForResultMainActivity和安排NewActivity到结果集,您将收到MainActivity.onActivityResult()NewActivity结束.