一般,我们对于activity和fragment都是在松开手时才对其进行销毁,所以一般代码是这么写的:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
        // do something
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

我们知道,对于上面的代码,如果当前是activity,按下返回键后当前activity不会退出,会等到松开手时,activity才会退出销毁,没有问题。

但是当我们当前界面是fragment时,按下返回键后,我们发现界面立刻返回到了上面一个fragment(假如前面一个界面也是fragment),为什么没有在松开手的时候才退出fragment呢?

突然又想到了一个处理返回键的方法,那就是onBackPressed(),那么这个方法可以吗?

@Override
public void onBackPressed() {
    // do something
}
很遗憾的告诉你,居然是可行的,它会在松开手的时候才销毁fragment,不会在按下时就退出fragment !居然这么神奇,同样都是处理返回键按下的事情呀!?

或者是这样,我们不是要松开手才销毁Fragment吗?那我们重写返回键松手操作就可以了呀!

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
        return true;
    }
    super.onKeyUp(keyCode, event);
}


好了,就是这样滴。






本文转载:CSDN博客