2016-06-27 2 views
0

Я хочу обработать обратное событие при показе всплывающего окна в android. Мне нравится это. В фрагменте:Метод переопределения onBackPressed не работает при показе всплывающего окна

@Override 
public boolean onBackPressed() { 
    if (backPressStrategy == BACK_PRESS_PLAN_A) { 
     if (guideDialog != null) { 
      guideDialog.dismiss(); 
     } 
     closeFlashPay(REQ_CLOSE_FLASH_PAY_AND_FINISH); 
     return true; 
    } else if (backPressStrategy == BACK_PRESS_PLAN_B) { 
     if (guideDialog != null) { 
      guideDialog.dismiss(); 
     } 
     getActivity().finish(); 
     return true; 
    } else { 
     return false; 
    } 
} 

И в деятельности, я делаю как этот

@Override 
public void onBackPressed() { 
    PayBaseFragment contentFragment = (PayBaseFragment) getSupportFragmentManager().findFragmentByTag(TAG_CONTENT_FRAGMENT); 
    if (contentFragment != null && contentFragment.onBackPressed()) { 
     return; 
    } 
    super.onBackPressed(); 
} 

Проблема, в первый раз, когда я нажал кнопку назад, popupwindow просто исчез и внахлёст onBackPressed метода не было вызвано. Если я не нажму кнопку два раза. я показываю мое всплывающее окно, как это

guideDialog.showAtLocation(getActivity().getWindow().getDecorView(), Gravity.CENTER, 0, 0); 

Спасибо за помощь

+0

Я думаю, что диалог потребляя обратно нажмите в качестве отмены. Посмотрите на это http://stackoverflow.com/questions/10346011/how-to-handle-back-button-with-in-the-dialog – X3Btel

+0

Я видел эту ссылку, проблема в том, что я устанавливаю popupwindow forcursable. Должен установить false – Zijian

+0

Im не 100% уверен, что вы ожидаете. Установите onKey прослушиватель в диалоговом окне и вызовите метод closeFlashPay – X3Btel

ответ

0

Вы должны обрабатывать кнопку задней ключ вашего диалога с этим:

dialog.setOnKeyListener(new Dialog.OnKeyListener() { 
         @Override 
         public boolean onKey(DialogInterface arg0, int keyCode, 
              KeyEvent event) { 
          if (keyCode == KeyEvent.KEYCODE_BACK) { 
           dialog.dismiss(); 
           // you can call your onBackPress here 

          } 
          return true; 
         } 
        });