android TabActivity中onKeyDown無效問題

來源:互聯網
上載者:User

 @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);
        }
    }

此時在 TabActivity無法監聽keyevent,onKeyDown衝突了。

解決辦法:

1.當繼承TabActivity時,同學們是不是onKeyDown方法沒用,那是應為衝突了,可以用dispatchKeyEvent方法

 @Override
    public boolean dispatchKeyEvent(KeyEvent event)
    {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0 )        {
            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;
        }
        else
        {
            return super.dispatchKeyEvent(event);
        }
    }

可以解決問題,能監聽到keyEvent事件,但會監聽二次,彈出二個AlertDialog。

因此在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);
        }
    }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.