2013-07-15 2 views
4

Я хочу обработать обратное нажатие при отображении всплывающего окна. В некоторой степени я хочу отклонить его, и в некоторых случаях я не хочу выполнять какую-либо задачу во всплывающем окне.onBackPress не вызывается, когда отображается всплывающее окно

Когда отображается всплывающее окно, Activity onBackPress не будет вызываться. Затем, как можно отобразить всплывающее окно, когда отображается всплывающее окно?

+0

[посмотреть здесь] (http://stackoverflow.com/a/8606966/2345913) также прочитать его комментарии – CRUSADER

+0

Настройки фон рисует в нуль, не всегда будет закрыть всплывающее окно. У меня есть случай, когда я не хочу закрывать всплывающее окно, а делать какую-то задачу внутри всплывающего окна. Так что есть ли способ захватить событие пресса, когда появится всплывающее окно. –

ответ

6

Необходимо указать setBackgroundDrawable() на PopupWindow и установить фон на номер null. Это звучит странно, но если background не настроен на что-то на вашем PopupWindow, тогда он не сможет обнаружить события от Activity, такие как касание снаружи окна или нажатия кнопок на задней панели.

У меня была такая же проблема всего несколько дней назад. Я попытаюсь найти ответ SO, где кто-то объясняет, почему это так, но это может занять меня немного. В то же время, попробуйте, он должен работать.

Found it

У меня не было возможности проверить это, но вы можете попробовать добавить keyEventListener и делать что-то вроде этого

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     // put your code here 
    } 

и добавить setOutsideTouchable(true) к вашему PopupWindow объекта и вызова update() на него , Если это не сработает, вам может потребоваться просто оставить кнопку «Назад» отключенной, когда всплывающее окно показывается, и добавьте свой собственный Button в окно. Я не нашел ничего другого, что позволит вам отображать события с нажатой кнопки «Назад».

+0

Установка фонового рисунка на нуль всегда будет закрывать всплывающее окно. У меня есть случай, когда я не хочу закрывать всплывающее окно, а делать какую-то задачу внутри всплывающего окна.Так что есть ли способ захватить событие пресса, когда появится всплывающее окно. –

+0

Я обновил что-то попробовать. Я надеюсь, что это поможет, но я не уверен, что вы хотите сделать, когда вы используете 'PopUpWindow' – codeMagic

3
final PopupWindow popup = new PopupWindow(context); 
... 
popup.setFocusable(false); //Setting this to true will prevent the events to reach activity below 
popup.setBackgroundDrawable(new BitmapDrawable()); //Or anything else, not null! 

Тогда в вашей деятельности:

@Override 
public void onBackPressed() { 
    //your code 
} 
4

набор фоновых вытяжке, как это

popup.setBackgroundDrawable(new BitmapDrawable()); 

затем установить OnDismissListener как этот

popup.setOnDismissListener(new PopupWindow.OnDismissListener() { 
      @Override 
      public void onDismiss() { 
       //do your code here 
      } 
     }); 
0

Я знаю его слишком поздно, но это может помочь другим. Есть два вариант сделать это

1) Если всплывающее окно фокус не важно для вас, а затем установить

mPopupInfoWindow.setFocusable(false); 

, потому что, если ваше всплывающее окно находится в фокусе, то он не будет передавать обратно пресс-конференцию для деятельности поэтому метод onBackPressed() не называется

2) Если для вас выбраны фокус для всплывающих окон, пусть это будет true и установите этот прослушиватель в всплывающем окне. Этот код работает для меня

mPopupInfoWindow.getContentView().setFocusableInTouchMode(true); 
    mPopupInfoWindow.getContentView().setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if (keyCode == KeyEvent.KEYCODE_BACK) { 
       mPopupInfoWindow.dismiss(); 
       return true; 
      } 
      return false; 
     } 
    }); 
Смежные вопросы