編輯:關於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裡面就可以實現自己想要實現的操作了。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
Intent意圖是android中非常重要的部分,他在Activity,service中有較為廣泛的應用。 1 public void startActiv
public class TvControlActivity extends Activity { private TvControlActivity tvCont
前言本篇文章帶大家體驗一下一種具有擴展性的適配器寫法。這個適配器主要用於Item有多種的情況下,當然只有一種類型也是適用的實現毫無疑問我們要繼承BaseAdapter,重
Android 中的 Service按運行地點分類:1、本地服務(Local) 該服務依附在主進程上, 服務依附在主進程上而不是獨立的進程,這樣在一定程度上節約了資源,另