@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
//按下鍵盤上返回按鈕
if (keyCode == KeyEvent.KEYCODE_BACK)
{
new AlertDialog.Builder(LoginActivity.this).setTitle("提示")
.setMessage("確認退出嗎?")
.setIcon(R.drawable.icon)
.setPositiveButton("肯定",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
android.os.Process.killProcess(android.os.Process.myPid()); // 結束進程
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
}
})
.show();
return true;
}
else
{
return super.onKeyDown(keyCode, event);
}
}android
此時在 TabActivity沒法監聽keyevent,onKeyDown衝突了。ide
解決辦法:ui
1.當繼承TabActivity時,同窗們是否是onKeyDown方法沒用,那是應爲衝突了,能夠用dispatchKeyEvent方法this
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0&&event.getAction() == KeyEvent.ACTION_DOWN ) {
new AlertDialog.Builder(MainActivity.this).setTitle("提示")
.setMessage("確認退出嗎?")
.setIcon(R.drawable.icon)
.setPositiveButton("肯定",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
new RequestCommandService().logoutReq();
android.os.Process.killProcess(android.os.Process.myPid()); // 結束進程
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
}
})
.show();
return false;
}
return super.dispatchKeyEvent(event);
}spa
能夠解決問題,能監聽到keyEvent事件,但會監聽二次,彈出二個AlertDialog。blog
所以在if判斷須要添加event.getAction() == KeyEvent.ACTION_DOWN就OK了繼承
2.也能夠到TabActivity的子Activity用onKeyDown進程
3.當有雙重TabActivity時能夠用事件
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0){
TouchListenerUtils.Back(this.getParent().getParent());//getParent().是指父類
return false;
}else{
return super.onKeyDown(keyCode, event);
}
}get