Java 片段内的WebView返回按钮
在一个片段中,我使用的是WebView。单击“后退”按钮时,我只需查询两个选项 第一个ifurl.equals(“www.google.com”)[效果非常好] secondif强>!url.equals(“www.google.com”)[不起作用] 我在调试模式下工作,但我的第二个if不工作,即使url不同于“google.com”并关闭应用程序 Fragment.JavaJava 片段内的WebView返回按钮,java,android,Java,Android,在一个片段中,我使用的是WebView。单击“后退”按钮时,我只需查询两个选项 第一个ifurl.equals(“www.google.com”)[效果非常好] secondif!url.equals(“www.google.com”)[不起作用] 我在调试模式下工作,但我的第二个if不工作,即使url不同于“google.com”并关闭应用程序 Fragment.Java @Override public void onResume() { super.onResume();
@Override
public void onResume() {
super.onResume();
if (getView() == null) {
return;
}
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
if(url.equals("https://www.google.com")){
//normal geri
final AlertDialog.Builder builder_question1 = new AlertDialog.Builder(getContext());
builder_question1.setTitle("Are you sure to close the app?");
builder_question1.setCancelable(true);
//POSITIVE BUTTON
builder_question1.setPositiveButton("yes",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface, int i) {
System.exit(0);
}
});
//NEGATIVE BUTTON
builder_question1.setNegativeButton("no",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//do something...
//and dismiss
dialogInterface.dismiss();
}
});
builder_question1.create().show();
}
if(!url.equals("https://www.google.com")){
if(webView.canGoBack()){
webView.goBack();
}
}
}
return true;
}
});
}
WebViewClient
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Toast.makeText(getContext(), ""+url, Toast.LENGTH_SHORT).show();
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, request);
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
// Toast.makeText(getContext(), "page loaded", Toast.LENGTH_SHORT).show();
super.onPageFinished(view, url);
}
});
webView.loadUrl(url);
“在包含片段的活动中应用后退按钮”也许这对您有所帮助
if(url.equals("https://www.google.com")){
//normal geri
} else {
if(webView.canGoBack()){
webView.goBack();
}
}
这是一个问题,当您试图显示对话框时,由于对话框生成器中的上下文类型错误,应用程序第二次崩溃 将AlertDialog上下文从
getContext()
更改为getActivity()代码>和系统退出(0)代码>与getActivity().finish()一起使用代码>
我以前也试过,没用。我认为返回类型有问题。是否在webView.canGoBack()
之前尝试登录?是的,正如我所说,它不会进入“其他”。我还尝试了“如果”而不是“其他”。那也不管用。我试过了,但遇到了更多的麻烦。实际上,我查询了很多标签片段中的一个返回按钮。谢谢,但正如我所说的,第一个“如果”运行良好。下面的第二个“如果”有问题。@juniordev我已经更新了答案,返回false,这样它会覆盖事件的默认行为。您在哪里设置变量url
?因为它来自webviewclient,它是当前的url。
final AlertDialog.Builder builder_question1 = new AlertDialog.Builder(getActivity());
builder_question1.setTitle("Are you sure to close the app?");
builder_question1.setCancelable(true);
//POSITIVE BUTTON
builder_question1.setPositiveButton("yes",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface, int i) {
getActivity().finish();
}
});
if(!url.equals("https://www.google.com")){
if(webView.canGoBack()){
webView.goBack();
return false;
}
}