android后退事件的处理

android手机中有一个返回的按键,也就是Back键。
默认情况下,点击一下Back键后,就会执行onBackPressed()这个方法,然后就会退出整个activity,并且销毁activity.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }
}
如果不想点击Back键就推出整个activity,就必须重写onBackPressed()这个方法,把想要执行的代码放在里面即可,并且要把把super.onBackPressed()注释掉。
比如一般的应用都是第一次点击back键后提示说“再按一次后退键退出程序”,
我们可以这样实现,定义一个点击的次数来判断是否是第二次点击,是则退出:
    private int clickCount=0;
    @Override
    public void onBackPressed() {
//        super.onBackPressed();
        if (clickCount==0){
            Toast.makeText(MainActivity.this,"再点击一次退出应用",Toast.LENGTH_LONG).show();
            clickCount++;
        }else {
            finish();
        }

    }

但是这种方法会有不足的地方,因为有些时候我们是手误点到了Back键,这样clickCount就改变了,下一次只需点击一次就没有提示便直接退出应用了。
所以我们可以利用另一种方法来实现,就是定义一个变量来保存两次点击直接的时间间隔ClickTime,如果时间间隔小于1s,就执行finish(),否则就把当前的时间赋值给clickTime,这样的逻辑执行起来比较合理
private long clickTime = 0;

@Override
public void onBackPressed() {
    //super.onBackPressed();
    if (clickTime == 0) {
        Toast.makeText(MainActivity.this, "再点击一次退出应用", Toast.LENGTH_LONG).show();
        clickTime = System.currentTimeMillis();

    } else {
        long currentTime = System.currentTimeMillis();
        if (currentTime - clickTime < 1000) {
            finish();
        } else {
            Toast.makeText(MainActivity.this, "再点击一次退出应用", Toast.LENGTH_LONG).show();
            clickTime = currentTime;

// 把当前的时间再记录下来
}
}
}

还有另一个思路,就是重写 onKeyDown()这个方法,执行跟上面相同的逻辑就行了。注意:在重写Keydown()方法要return false,来阻止执行默认的行为

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_BACK){
//在这里面执行相同的逻辑就行
}
//return super.onKeyDown(keyCode, event);
return false;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值