我显示了一个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();
}
当您重写这样的方法时,调用超级方法非常重要。把你想执行的任何代码放在超级方法调用之前,你应该是黄金!
编辑:
在超级跑车之前,而不是之后。