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;
}