2016-10-27 3 views
0

Я хочу использовать кнопку для управления всплывающим окном, Когда я нажимаю кнопку, всплывающее окно показывает, а затем нажимает кнопку, popupwindow dimiss. Ниже мой код:Как использовать кнопку для управления всплывающим окном или dimiss?

@Override 
public void onClick(View v) { 
    showPopupWindow(); 
} 

/*** button control the PopupWindow ***/ 
private void showPopupWindow() { 
    View view = View.inflate(this, R.layout.popwindow_item, null); 
    popupwindow = new PopupWindow(view, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); 
    if (popupwindow.isShowing()) { 
     popupwindow.dismiss(); 
    }else { 
     popupwindow.setOutsideTouchable(true); 
     popupwindow.setBackgroundDrawable(new BitmapDrawable()); 
     popupwindow.showAsDropDown(title); 
    } 
    viewOfPop(view); 
} 

и результат в том, что при нажатии на кнопку, то popupwindow всегда показывать, а не dimiss. Я также пытаюсь использовать флаг, private boolean isShow = false;, и когда я нажимаю кнопку, я изменю логическое значение, но я не знаю, как я могу изменить логическое значение, popupwindow закрывается, когда я нажимаю внешний вид popupwindow. пожалуйста, помогите мне, спасибо заранее!

ответ

2

Я думаю, что вы всегда создаете новый popupwindow, попробуйте добавить проверку.

private void showPopupWindow() { 
    if(popupwindow == null){ 
     View view = View.inflate(this, R.layout.popwindow_item, null); 
     popupwindow = new PopupWindow(view, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); 
    } 
    if (popupwindow.isShowing()) { 
     popupwindow.dismiss(); 
    }else { 
     popupwindow.setOutsideTouchable(true); 
     popupwindow.setBackgroundDrawable(new BitmapDrawable()); 
     popupwindow.showAsDropDown(title); 
    } 
    viewOfPop(view); 
} 
+0

Также еще одна вещь, лучше, чтобы создать экземпляр вида и инфляции в OnCreate или onCreateView – SanthoshN

+0

Я стараюсь, как вы сказали, но он не работает, но я добавляю 'popupwindow.setFocusable (true);' он работает, я не знаю причину –

0
mPopupWindow.setOutsideTouchable(true); 

Это делает ваш PopupWindow получить сенсорные события за его пределами включая ваш Баттона.

Когда ACTION_DOWN произошло, ваш PopupWindow будет уволен.

Когда ACTION_UP произошло, кнопка была нажата, так что идите к showPopupWindow()

Вот почему при нажатии на кнопку, ваш PopupWindow будет мерцать и показать навсегда.

+0

Не может быть причиной, beacause Я добавляю 'popupwindow.setFocusable (true);' и тогда он работает правильно. –

0

я добавляю popupwindow.setFocusable(true); и это нормально

Смежные вопросы