2014-01-20 62 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(); 
} 
相关问题