2013-08-19 56 views
2

我在這個主題上看到很多帖子,但無法爲我找到正確的答案。PopUpWindow返回鍵事件

我有一個活動,當我彈出彈出窗口變暗。 後退按鈕的工作,但只有第二次我按它,第一次按下關閉彈出窗口,但它不是不明暗的活動,因爲我不能從popupwindows捕捉事件,第二個新聞捕捉的活動,只有然後我可以使它變暗。

這裏是我試圖做到這一點:

m_PopupWindow.setBackgroundDrawable(new BitmapDrawable()); 
    m_PopupWindow.setOutsideTouchable(true); 


    View popUpWindowLaout = m_PopupWindow.getContentView(); 
    popUpWindowLaout.setFocusableInTouchMode(true); 


//first press doesnt get caught here 
    popUpWindowLaout.setOnKeyListener(new View.OnKeyListener() 
    { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) 
     { 
      if (keyCode == KeyEvent.KEYCODE_BACK) 
      { 
       m_ActionBar.show(); 
       unShadeTheActivity(); 
       m_PopupWindow.dismiss(); 
       return true; 
      } 
     } 
    }); 

//本功能將趕上第二次按下,將工作,但我希望第一個按一定會做到。

@Override 
public void onBackPressed() { 
    if (m_PopupWindow != null) 
    { 
     m_ActionBar.show(); 
     unShadeTheActivity(); 
     m_PopupWindow.dismiss(); 
    } 
    else 
    { 
     super.onBackPressed(); 
    } 
} 
+0

刪除您'其他{super.onBackPressed(); }',它總是應該調用'super.onBackPressed();'來取消調暗我猜的屏幕。希望這可以幫助。 – user2652394

+0

在所有情況下調用'super.onBackPressed' ...或者你可以在popupWindow上設置一個解僱監聽器,因爲你可以調用'finish();' – Faizan

回答

2

變化

public void onBackPressed() { 
    if (m_PopupWindow != null) 
    { 
     m_ActionBar.show(); 
     unShadeTheActivity(); 
     m_PopupWindow.dismiss(); 
    } 
    else 
    { 
     super.onBackPressed(); 
    } 
} 

public void onBackPressed() { 
    super.onBackPressed(); 
    if (m_PopupWindow != null) 
    { 
     m_ActionBar.show(); 
     unShadeTheActivity(); 
     m_PopupWindow.dismiss(); 
    } 
else 
{ 
// rest of the code 
// you can use finish,dismiss or call startActivity 
// finish(); 

} 

} 
2
popupWindow.setOnShowListener(HandlePopupShowLister); 
popupWindow.setOnDismissListener(HandlePopUpDismissListerner); 

public static OnDismissListener HandlePopUpDismissListerner = new OnDismissListener() { 

    @Override 
    public void onDismiss(DialogInterface dialog) { 
     // TODO Auto-generated method stub 
     Log.i("HandlePopUpDismissListerner", "HandlePopUpDismissListerner"); 
     CommonVariable.IsPopupOpen = false; 
    } 
}; 
public static OnShowListener HandlePopupShowLister = new OnShowListener() { 
// onShowListener interface. 
    @Override 
    public void onShow(DialogInterface dialog) { 
     Log.i("HandlePopupShowLister", "HandlePopupShowLister"); 
     // TODO Auto-generated method stub 
     CommonVariable.IsPopupOpen = true; 

    } 
};