现在的应用,为了防止在主界面的误操作,一般在点击返回键的时候都会有退出确认的机制,下面介绍其实现方法:
第一种--弹出确认框:
重写onKeyDown的构造方法监听按键,并判断其按下的是不是返回键,如果是就弹出提示框。
1 @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event) { 3 // TODO Auto-generated method stub 4 if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0) 5 { 6 new AlertDialog.Builder(getApplicationContext()) 7 .setTitle("退出提示") 8 .setMessage("您确认要退出吗?") 9 .setPositiveButton("确认", new DialogInterface.OnClickListener() { 10 11 @Override 12 public void onClick(DialogInterface dialog, int which) { 13 // TODO Auto-generated method stub 14 finish(); 15 } 16 }).setNegativeButton("取消", new DialogInterface.OnClickListener() { 17 18 @Override 19 public void onClick(DialogInterface dialog, int which) { 20 // TODO Auto-generated method stub 21 dialog.dismiss(); 22 } 23 }).show(); 24 } 25 return super.onKeyDown(keyCode, event); 26 }
第二种--点击两次退出
A:用Handler进行处理
public class MainActivity extends Activity { // 定义一个变量,来标识是否退出 private static boolean isExit = false; Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); isExit = false; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exit(); return false; } return super.onKeyDown(keyCode, event); } private void exit() { if (!isExit) { isExit = true; Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); // 利用handler延迟发送更改状态信息 mHandler.sendEmptyMessageDelayed(0, 2000); } else { finish(); System.exit(0); } } }
B:通过按键的时间差
public class MainActivity extends Activity { private long lastTime = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exit(); return false; } return super.onKeyDown(keyCode, event); } public void exit() { if ((System.currentTimeMillis() - lastTime) > 2000)
{
Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); lastTime = System.currentTimeMillis();
}
else
{
finish();
System.exit(0);
}
}
}
C:通过标志位(转载自:http://www.cnblogs.com/shang53880/p/3578752.html)
public class ExitTest extends Activity implements OnClickListener { 15 16 private Button mExitBtn; 17 private static boolean isExit = false; 18 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.exit); 23 initView(); 24 } 25 26 private void initView() { 27 mExitBtn = (Button) findViewById(R.id.exit); 28 mExitBtn.setOnClickListener(this); 29 } 30 31 @Override 32 public void onClick(View v) { 33 switch (v.getId()) { 34 case R.id.exit: 35 exit(); 36 break; 37 38 default: 39 break; 40 } 41 } 42 43 private void exit() { 44 if(!isExit) { 45 isExit = true; 46 Toast.makeText(this, "在按一次退出程序", Toast.LENGTH_SHORT).show(); 47 new Timer().schedule(new TimerTask() { 48 49 @Override 50 public void run() { 51 isExit = false; 52 } 53 }, 2000); 54 } else { 55 finish(); 56 } 57 } 58 59 @Override 60 public boolean onKeyDown(int keyCode, KeyEvent event) { 61 if(keyCode == KeyEvent.KEYCODE_BACK) { 62 exit(); 63 } 64 return false; 65 } 66 }
浙公网安备 33010602011771号