Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 解決dialog彈出時無法捕捉Activity的back事件問題

Android 解決dialog彈出時無法捕捉Activity的back事件問題

編輯:關於Android編程

Android 如何解決dialog彈出時無法捕捉Activity的back事件

  在一些情況下,我們需要捕捉back鍵事件,然後在捕捉到的事件裡寫入我們需要進行的處理,通常可以采用下面三種辦法捕捉到back事件:

  1)重寫onKeyDown或者onKeyUp方法

  2)重寫onBackPressed方法

  3)重寫dispatchKeyEvent方法

  這三種辦法有什麼區別在這裡不進行闡述,有興趣的朋友可以查閱相關資料。

  然而在有dialog彈出時,想捕捉back鍵的事件的話,上述三種辦法都無法實現。因為上述方法是重寫在activity裡面的,也就是說當activity是當前焦點時,它可以捕捉到相應的back鍵事件,而有dialog彈出時,dialog獲取了當前焦點,所以activity裡面的方法無法獲取到back鍵事件,此時有兩種思路:

  1)設置dialog的setOnCancelListener監聽:


selectDialog.setOnCancelListener(new OnCancelListener() {
        
        @Override
        public void onCancel(DialogInterface dialog) {
          // TODO Auto-generated method stub
      
            // Toast.makeText(getBaseContext(), "點擊了back", Toast.LENGTH_SHORT).show();
        }
      });

  這樣就可以捕捉到back鍵的事件了,當按下back鍵時,系統默認的操作會讓dialog cancel掉,此時會觸發OnCancelListener,然後在onCancel方法裡面就可以實現自己想要實現的操作了。

  2)設置dialog的setOnKeyListener並重寫dispatchKeyEvent方法

selectDialog.setOnKeyListener(new OnKeyListener() {
        
        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
          // TODO Auto-generated method stub
          if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0)
          {
            dialog.dismiss();
          }
          return false;
        }
      });
  public boolean dispatchKeyEvent(KeyEvent event)
  {
    
    switch(event.getKeyCode())
    {
    case KeyEvent.KEYCODE_BACK:      
      Toast.makeText(getBaseContext(), "點擊了back", Toast.LENGTH_SHORT).show();
      break;
    default:
      break;
    }
    return super.dispatchKeyEvent(event);
  }

  然後在dispatchKeyEvent裡面就可以實現自己想要實現的操作了。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved