【问题标题】:android - overriding the back button [duplicate]android - 覆盖后退按钮[重复]
【发布时间】:2013-02-25 17:45:04
【问题描述】:

我在 Activity 的布局中有一个 webView。如果按下后退按钮,我希望该视图消失并且其他视图变得可见,我做了以下操作:

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && web.getVisibility()==View.VISIBLE) {
        restoreInitalState(); // set Visibility of Views
        APP_CONSTANTS.LOGIN_OP_CANCELLED(getApplicationContext()); // inform the user that the current operation was cancelled
    }
    return super.onKeyDown(keyCode, event);

}

它可以工作,但它会在调用我的方法后立即完成 Activity,就像按下后退按钮 2 次一样。我需要保留当前的 ​​Activity 并调用我上面提到的方法。有什么建议吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    您需要返回 false。改变这个:

    if (keyCode == KeyEvent.KEYCODE_BACK && web.getVisibility()==View.VISIBLE) {
        restoreInitalState(); // set Visibility of Views
        APP_CONSTANTS.LOGIN_OP_CANCELLED(getApplicationContext()); // inform the user that the current operation was cancelled
    }
    

    到这里:

    if (keyCode == KeyEvent.KEYCODE_BACK && web.getVisibility()==View.VISIBLE) {
        restoreInitalState(); // set Visibility of Views
        APP_CONSTANTS.LOGIN_OP_CANCELLED(getApplicationContext()); // inform the user that the current operation was cancelled
        return false;
    }
    

    【讨论】:

      【解决方案2】:

      我认为正确的方法是:

      @Override
      public boolean onKeyDown(int keyCode, KeyEvent event) {
          if (keyCode == KeyEvent.KEYCODE_BACK && web.getVisibility()==View.VISIBLE) {
              restoreInitalState(); // set Visibility of Views
              APP_CONSTANTS.LOGIN_OP_CANCELLED(getApplicationContext()); 
              return true;
          }
          return super.onKeyDown(keyCode, event);
      }
      

      【讨论】:

        【解决方案3】:

        或者只是在你的Activity类中使用onBackPressed()方法,这是覆盖它的最简单方法。

        【讨论】:

          【解决方案4】:

          我想你要找的回调方法是onBackPressed

          但是您当前的解决方案应该也可以工作,您只需要在 if 块内返回 true,否则事件将传播到另一个回调。

          【讨论】: