2014-01-20 95 views
0

我有一個問題,我想處理PopUpWindow(對話框)中的按鈕事件而不是活動。我實現OnKeyListner,...但它不工作如何在對話框的活動中禁用後退按鈕

這裏是我的PopUpWindow

public class PopUp extends PopupWindow implements OnKeyListener{ 
... 
@Override 
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 
    // TODO Auto-generated method stub 
    return false; 
} 
+2

你是什麼意思不工作? –

+1

你在哪裏setOnKeyListener()? – venciallee

+0

你在Activity中顯示PopupWindow嗎?如果是的話,請重寫Activity的onBackPressed()方法並調用PopupWindow中您想要處理的相關代碼...不要在這裏調用super.onBackPressed() –

回答

2

你需要重寫onKeyDown事件

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     return false; 
    } 
    return super.onKeyDown(keyCode, event); 
    } 

而且你需要設置監聽你的PopupWindow的內容視圖

PopupWindow.this.getContentView().setOnKeyListener(new OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
    return false; 
    } 
}); 

您需要設置密鑰聽衆手動

+1

是的......我明白了你的觀點我犯了一個錯誤, 1給你... –

+0

剛剛更新了我的答案,我認爲OP沒有設置聽衆。 – redDragonzz

+0

謝謝你的建議,我試圖做,但不能重寫onKeyDown。 – user3213793

0

只是把這個代碼:

@Override 
public void onBackPressed() { 
    // Do Here what ever you want do on back press; 

} 

和事情應該爲你工作。如果你想特別是做一些back_pressed,然後寫在這個方法的代碼。

0

你可以按照一個取巧的辦法

創建PopupWindow的對象爲您的活動範圍。作爲 private PopupWindow localPopup;...並創建布爾標誌,用於識別popupwindow狀態

創建一個私有方法來處理popupwindow如下

private boolean actionOnPopupWindow(){ 
    if(isPopupWindowShowing){ 
     localPopup.dismiss(); 
     return false; 
    }else 
     return true; 
} 

處理來自onBackPress()的活動的方法,在彈出的窗口如下

@Override 
public void onBackPressed() { 
    if(actionOnPopupWindow() 
     super.onBackPressd(); 
} 
相關問題