2015-01-07 2 views
2

Х ребят,onBackPressed не вызывается, когда PopupWindow показывает

Так в настоящее время я использую PopupWindow для отображения в приложении браузере. Однако при нажатии кнопки «Назад» он ничего не делает. Я использую PopupWindow в другом фрагменте, затем я использую оператор, чтобы установить PopupWindow в свой FragmentActivity, а затем, когда я нажимаю кнопку «назад», он должен проверить, установлен ли PopupWindow или нет, и отклонить его или нет. Однако он даже не запускается через onBackPressed.

PopupWindow в фрагменте:

-> где я указываю строку, которая удостоверяется FragmentActivity получает PopupWindow, а также.

// Use webview for icons and website link. 
public void inAppBrowser(String url){ 
    mCursor.moveToFirst(); 
    // Inflate View 
    LayoutInflater layoutInflater = (LayoutInflater) ((MainActivity) MainActivity.getContext()).getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final View inflatedView = layoutInflater.inflate(R.layout.browser_window, null, false); 

    // Control View Childs. 
    LinearLayout header = (LinearLayout) inflatedView.findViewById(R.id.filter_header); 
    header.setBackgroundColor(Color.parseColor(color)); 
    Button cancel = (Button) inflatedView.findViewById(R.id.cancel); 
    Button done = (Button) inflatedView.findViewById(R.id.done); 

    // Set PopupWindow position. 
    Display display = ((MainActivity) MainActivity.getContext()).getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 

    // Control PopupWindow. 
    final PopupWindow popWindow = new PopupWindow(inflatedView, size.x, size.y, true); 
    popWindow.setAnimationStyle(android.R.anim.fade_in); 
    popWindow.setFocusable(true); 
    popWindow.setOutsideTouchable(true); 

    popWindow.showAtLocation(v, Gravity.BOTTOM, 0, 150); 
    --> MainActivity.setPopupWindow(popWindow); 

    // Control WebView 
    WebView myWebView = (WebView) inflatedView.findViewById(R.id.webview); 
    myWebView.setWebViewClient(new WebViewClientAdapter()); 
    myWebView.clearCache(true); 
    myWebView.clearHistory(); 
    myWebView.getSettings().setJavaScriptEnabled(true); 
    myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
    MainActivity.setWebView(myWebView); 
    if (url != null) { 
     if (url.contains("http://") || url.contains("https://")) { 

     } else { 
      url = "http://" + url; 
     } 
     myWebView.loadUrl(url); 
    } else { 
     popWindow.dismiss(); 
     MainActivity.setPopupWindow(null); 
     MainActivity.setWebView(null); 
    } 

    cancel.setVisibility(View.INVISIBLE); 
    done.setText("Close"); 

    done.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      popWindow.dismiss(); 
     } 
    }); 
} 

Мой onBackPressed код:

@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    //check if popupwindow is open 
    Log.e(TAG, "Check if it runs through this section"); 
    if (popWindow != null) { 
     if (myWebView != null && myWebView.canGoBack()) { 
      myWebView.goBack(); 
     } else { 
      popWindow.dismiss(); 
      popWindow = null; 
      myWebView = null; 
     } 
    } 
} 

Игнорируйте WebView на данный момент. Это может быть вопросом в будущем, но я хочу, чтобы PopupWindow закрылся первым. Любая помощь приветствуется.

ответ

5

Сделайте PopupWindow не фокусируемым:

final PopupWindow popWindow = new PopupWindow(inflatedView, size.x, size.y, false); 

удалить Также эту линию, которая была избыточным:

popWindow.setFocusable(true); 
+1

Это сработало, спасибо! –

+0

удивительный! u сохранить мой день –

+0

Не работает на Android 4.4.2 с помощью 'new PopupWindows (Context); popupWindow.setFocusable (false); ' –

1

Я думаю, вы должны определить статический метод removePopupWindow(view v) в MainActivity, и вызвать его в onBackPressed() как MainActivity.removePopupWindow(popWindow); Надеюсь, это поможет вам.

+1

Мой onBackPressed уже в MainActivity (FragmentActivity), и это не называется. Это моя проблема прямо сейчас, когда мой PopupWindow показывает, что он не будет называть onBackPressed. –

+0

положить super.onBackPressed(); теперь попробуйте – SAM

+2

Если 'onBackPressed' не вызывается, вызов супер метода внутри него ничего не изменит. – Simas

0

Ok, так что этот вопрос был задан давно, но я думаю, что у меня есть лучшее решение. То, что я сделал, это добавить OnDismissListener к моему всплывающему окну. В этом слушателе я добавил код, который я хотел выполнить, когда всплывающее окно было отклонено. Таким образом, Android все равно справится с открытием и закрытием всплывающего окна, и я просто добавил одну строку, чтобы заставить ее работать.

Это способ добавить один:

yourAwesomePopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { 
     @Override 
     public void onDismiss() { 
      // Your code on dismiss here 
     } 
}); 
0
popup.showAtLocation(popupView, Gravity.CENTER,0,0); 
       popupshowing=true;// define this as a global 



@Override 
    public void onBackPressed() { 
     if(popupshowing) { 
      popup.dismiss(); 
      popupshowing=false; 



     } 
     else { 
      super.onBackPressed(); 
     } 

    }