2014-01-25 3 views
1

В одном из моих действий есть button, который при нажатии открывается PopupWindow. Мое намерение состоит в том, чтобы открыть PopupWindow и щелкнуть пользователем в любом месте экрана, кроме всплывающей области, PopupWindow должен быть уволен.Как убрать PopupWindow, когда вы нажимаете на него?

Для этого я поставил:

// onClick() 
myPopupWindow.setOutsideTouchable(true); 
myPopupWindow.setFocusable(false); 

Издание это работает отлично & PopupWindow получает отставку, когда я нажимаю в любом месте за пределами, но если нажать на кнопку, создавшего этот PopupWindow, то это событие потребляется и PopupWindow сначала закрывается, а затем снова открывается.

Я попытался переместить мою кнопку onclick() код на onTouch(). Но если я return true, тогда кнопка потребляет каждое событие. & открывает всплывающее окно снова и снова, даже при малейшем перетаскивании, касаясь экрана. Если I return false, он ведет себя так же, как в onClick() & открывает всплывающее окно снова, когда кнопка касается назад.

Так как я могу отклонить PopupWindow даже при нажатии кнопки?

+1

Возможный дубликат http://stackoverflow.com/a/3122696/957654 –

ответ

2

Просто отключите эту кнопку после ее нажатия, чтобы ее нельзя было щелкнуть, когда отображается всплывающее окно. button.setEnabled(false);

0

Я решил подобную проблему следующим образом:

 settingsImageButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (!settingsMenu.isShowing()) { 
       settingsMenu.showAsDropDown(settingsImageButton); 
       settingsImageButton.setEnabled(false); 
      } 
     } 
    }); 
    settingsMenu.setOnDismissListener(new PopupWindow.OnDismissListener() { 
     @Override 
     public void onDismiss() { 
      new AsyncTask<Void, Void, String>() { 
       @Override 
       protected String doInBackground(Void... params) { 
        return null; 
       } 

       @Override 
       protected void onPostExecute(String s) { 
        super.onPostExecute(s); 
        settingsImageButton.setEnabled(true); 
       } 
      }.execute(); 
     } 
    }); 

я вызвать метод setEnabled() асинхронно, потому что onDismiss событие раньше, чем OnClick событие.

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