public void showDiologFaile() {
Builder b = new AlertDialog.Builder(this);
b.setTitle("title");
b.setMessage("message?");
b.setPositiveButton("是", new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub d.mICount = findTimer;
d.fail = false;
// dialog.dismiss();

dialogRun = false;
//finish();
} });
b.setNegativeButton("否", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
finish();
}
});
b.create().show();
b.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
                if(keyCode == KeyEvent.KEYCODE_BACK) {
                    dialog.dismiss();
                    finish();
                    return true;
                }
                return false;
}
});
}

解决方案 »

  1.   

    楼主试试
    把b.create().show();
    拉到事件定义后面来
    还不行的话
    试试把事件绑在.create()的返回对象上
    然后再那个对象.show()
      

  2.   

    这句   b.setOnKeyListener(new OnKeyListener() 
    放在   b.create().show();  之上即可
      

  3.   

    另外 一个建议
    if改为
    if(event.getAction()==KeyEvent.ACTION_DOWN&&keyCode == KeyEvent.KEYCODE_BACK){

    }不然会执行2次onkey,一次down,一次up
      

  4.   

    我也遇到过lz这个问题,其实当dialog在前端的时候,你的焦点位于dialog界面,而不是activity界面,所以你在Activity里定义的onKeyDown()方法是不起作用的。