显示 PopupWindow 时未调用 onBackPressed
onBackPressed not called when PopupWindow is showing
嘿伙计们,
所以目前我正在使用 PopupWindow 来显示应用内浏览器。但是,当按下后退按钮时,它什么也不做。我在另一个 Fragment 中使用 PopupWindow,然后我使用一条语句在我的 FragmentActivity 中设置 PopupWindow,然后当我按下后退按钮时,它应该检查是否设置了 PopupWindow 并关闭它。但是它甚至没有通过 onBackPressed 运行。
片段中的弹出窗口:
--> 是我指出确保 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 先关闭。任何帮助表示赞赏。
我认为你应该在 MainActivity 中定义一个静态方法 removePopupWindow(view v)
,
并在 onBackPressed()
中调用它,例如 MainActivity.removePopupWindow(popWindow);
希望对你有帮助。
使您的 PopupWindow 不可聚焦:
final PopupWindow popWindow = new PopupWindow(inflatedView, size.x, size.y, false);
同时删除多余的这一行:
popWindow.setFocusable(true);
好的,很久以前就有人问过这个问题,但我想我有更好的解决方案。我所做的是在我的弹出窗口中添加一个 OnDismissListener
。在此侦听器中,我添加了弹出窗口关闭时我想执行的代码。这样 Android 仍然可以管理弹出窗口的打开和关闭,我只是添加了一行使其工作。
这是加一的方法:
yourAwesomePopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
// Your code on dismiss here
}
});
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();
}
}
你可以用这个。
Dialog dialog = new Dialog(ActivityMain.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST); dialog.setContentView(R.layout.mydialog);
dialog.setCancelable(true);
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
try {
if (mScannerView!=null) {
mScannerView.stopCamera();
}
} catch(Exception e){
e.printStackTrace();
}
}
});
嘿伙计们,
所以目前我正在使用 PopupWindow 来显示应用内浏览器。但是,当按下后退按钮时,它什么也不做。我在另一个 Fragment 中使用 PopupWindow,然后我使用一条语句在我的 FragmentActivity 中设置 PopupWindow,然后当我按下后退按钮时,它应该检查是否设置了 PopupWindow 并关闭它。但是它甚至没有通过 onBackPressed 运行。
片段中的弹出窗口:
--> 是我指出确保 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 先关闭。任何帮助表示赞赏。
我认为你应该在 MainActivity 中定义一个静态方法 removePopupWindow(view v)
,
并在 onBackPressed()
中调用它,例如 MainActivity.removePopupWindow(popWindow);
希望对你有帮助。
使您的 PopupWindow 不可聚焦:
final PopupWindow popWindow = new PopupWindow(inflatedView, size.x, size.y, false);
同时删除多余的这一行:
popWindow.setFocusable(true);
好的,很久以前就有人问过这个问题,但我想我有更好的解决方案。我所做的是在我的弹出窗口中添加一个 OnDismissListener
。在此侦听器中,我添加了弹出窗口关闭时我想执行的代码。这样 Android 仍然可以管理弹出窗口的打开和关闭,我只是添加了一行使其工作。
这是加一的方法:
yourAwesomePopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
// Your code on dismiss here
}
});
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();
}
}
你可以用这个。
Dialog dialog = new Dialog(ActivityMain.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST); dialog.setContentView(R.layout.mydialog);
dialog.setCancelable(true);
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
try {
if (mScannerView!=null) {
mScannerView.stopCamera();
}
} catch(Exception e){
e.printStackTrace();
}
}
});