Android TabActivity中onKeyDown無效問題

@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

相關文章
相關標籤/搜索