android按下返回键弹出提示框的几种做法!

       第一次写技术博客,这个问题困扰了一天多的时间,本人接触安卓时间较短,写博客也是为了记录自己的感想和收获,也是为了学习,在此谢谢许多辛苦写作的博客大牛,谢谢你们的无私奉献。


话不多说,开始正事,首先明确触摸屏幕时有哪些方法被激活了,

1 触摸控件(View)首先执行dispatchTouchEvent方法。

2在dispatchTouchEvent方法中先执行onTouch方法,后执行onClick方法(onClick方法在onTouchEvent中执行,下面会分析)。

3如果控件(View)的onTouch返回false或者mOnTouchListener为null(控件没有设置setOnTouchListener方法)或者控件不是enable的情况下会调运onTouchEvent,dispatchTouchEvent返回值与onTouchEvent返回一样。

4如果控件不是enable的设置了onTouch方法也不会执行,只能通过重写控件的onTouchEvent方法处理(上面已经处理分析了),dispatchTouchEvent返回值与onTouchEvent返回一样。

5如果控件(View)是enable且onTouch返回true情况下,dispatchTouchEvent直接返回true,不会调用onTouchEvent方法。

 所以解决办法也从这里入手,在dispatchTouchEvent或者onTouchEvent方法中添加弹出对话框的逻辑;下面是代码,


import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;


public class MainActivity extends BaseActivity {


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


// public boolean dispatchKeyEvent(KeyEvent event) {
// if (event.getKeyCode() == KeyEvent.KEYCODE_BACK
// && event.getAction() == KeyEvent.ACTION_DOWN) {
// showDialog();
// return false;// 返回false,不会把事件消费掉,会继续调用onBackPressed
// }
// return false;
// }
// public boolean dispatchKeyEvent(KeyEvent event) {
// // TODO Auto-generated method stub
// if(event.getKeyCode()==KeyEvent.KEYCODE_BACK&&event.getAction()==
// KeyEvent.ACTION_DOWN){
// showDialog();
// return false;
// }
// return super.dispatchKeyEvent(event);
// }
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_DOWN) {
showDialog();
return false;
}
return super.onKeyDown(keyCode, event);
}


private void showDialog() {
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("提示");
builder.setMessage("是否确定退出?");
builder.setPositiveButton("是", new DialogInterface.OnClickListener() {


@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
finish();
}
});
builder.setNegativeButton("否", new DialogInterface.OnClickListener() {


@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
builder.create().show();
// AlertDialog isExit = new AlertDialog.Builder(this).create();
// // 设置对话框标题
// isExit.setTitle("系统提示");
// // 设置对话框消息
// isExit.setMessage("确定要退出吗");
// // 添加选择按钮并注册监听
// isExit.setButton("确定", new DialogInterface.OnClickListener() {
//
// @Override
// public void onClick(DialogInterface dialog, int which) {
// // TODO Auto-generated method stub
//
// }
// });
// isExit.setButton2("取消", new DialogInterface.OnClickListener() {
//
// @Override
// public void onClick(DialogInterface dialog, int which) {
// // TODO Auto-generated method stub
//
// }
// });
// // 显示对话框
// isExit.show();
}


public void onBackPressed() {
System.out.println("2");
// TODO Auto-generated method stub
super.onBackPressed();
}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值