Android 中'back'按钮的默认操作的代码是什么?



我显示了一个edittext和一个保存按钮。当按下后退键时,我希望它们消失(如果它们可见(,下一次后退将执行后退按钮的默认操作。代码如下:

public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            event.startTracking();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
                && !event.isCanceled()) {
            if(save.isShown())
            {
                 save.setVisibility(Button.GONE);
                 text.setVisibility(EditText.GONE);
            }
                    //else ???????????????
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }   

上述代码具有以下结果:1.当edittext和按钮可见时,后退按钮会使它们消失,但接下来的按下不会显示任何内容。虽然如果一直按下后退按钮,我们将返回到上一个活动。2.当edittext和按钮最初不在时,按下back按钮会意外停止应用程序。虽然如果一直按下后退按钮,我们将返回到上一个活动。

代替else,我尝试了finish((,但程序意外停止。return false也会得到相同的结果。。

@Override
public void onBackPressed() {
  doStuff();
}

链接此处

编辑

等等,长按怎么样?如果我读对了最初的问题,你希望第一次按下后隐藏一些视图,第二次按下后表现正常吗?为什么不只是这样:

private boolean flag = false;
@Override
public void onBackPressed() {
  if(flag) {
    super.onBackPressed();
  } else {
    view.setVisibility(View.GONE);
    flag = true;
  }
}

替换

if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
    if(save.isShown()) {

通过

if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled() && save.isShown()) {
@Override
public void onBackPressed() {
    myMethod();
    super.onBackPressed();
}

当您重写这样的方法时,调用超级方法非常重要。把你想执行的任何代码放在超级方法调用之前,你应该是黄金!

编辑:

在超级跑车之前,而不是之后。

最新更新