AlertDialog中的WebView加载网址前 [英] AlertDialog before loading url in webview
本文介绍了AlertDialog中的WebView加载网址前的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这似乎是一个容易的事。我只是不能换我的头周围。
我刚开始对应用程序开发和Java
This seems like an easy thing to do. I just can't wrap my head around it. I've just started on app development and java
我试图创造一个确认框转到这个网址?是/否 - 当一个URL被加载网页视图
I'm trying to create a confirm box "Go to this url?" Yes/No - when an url is loaded in a webview.
我走到这一步:
private WebView mWebView;
public ProgressDialog pd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.activity_main_webView);
// Show loading
pd = new ProgressDialog(this);
pd.setMessage("Please wait Loading...");
pd.show();
// Enable Javascript
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.setWebViewClient(new MyWebViewClient());
mWebView.loadUrl(getString(R.string.Url));
}
和MyWebViewClient - 我需要停止的负载,并等待用户交互:
And MyWebViewClient - I need to stop the load and wait for the user to interact:
@Override
public boolean shouldOverrideUrlLoading(final WebView view, String url) {
Context appContext = view.getContext().getApplicationContext();
AlertDialog.Builder alertDialog = new AlertDialog.Builder(appContext);
alertDialog.setTitle("Go to this url?");
alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog,int which)
{
// Run the code below on yes - how to I get my parameters in here?
}
});
alertDialog.setNeutralButton("No", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
// Cancel the request, but how?
}
});
// Run this code on Yes
if(Uri.parse(url).getHost().startsWith(String.valueOf(R.string.Url))) {
return false;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
return true;
}
侧的问题(仍然相关) - 有没有prettier的方式来访问其他类参数:
Side question (still related) - is there a prettier way to access parameters in other classes:
@Override
public void onPageFinished(WebView view, String url) {
// This is far from pretty, but I need to get Progress Dialog
MainActivity host = (MainActivity) view.getContext();
if (host.pd.isShowing()) {
host.pd.dismiss();
}
}
在此先感谢!
推荐答案
我不知道,但尝试这个办法:
I am not sure but try this way:
@Override
public boolean shouldOverrideUrlLoading(final WebView view, String url) {
boolean flag=true;
Context appContext = view.getContext().getApplicationContext();
AlertDialog.Builder alertDialog = new AlertDialog.Builder(appContext);
alertDialog.setTitle("Go to this url?");
alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog,int which)
{
if(Uri.parse(url).getHost().startsWith(String.valueOf(R.string.Url))) {
flag=false;
}else{
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
flag=true;
}
}
});
alertDialog.setNeutralButton("No", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
view.stopLoading();
}
});
return flag;
}
和给我的这些反馈
更新:无JS
设置的WebView
像
WebView webView;
String webViewUrl = "http://www.google.com";
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(false);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setPluginState(PluginState.ON);
webView.getSettings().setSupportZoom(true);
webView.loadUrl(webViewUrl);
然后实现 WebViewClient
这样的:
boolean flag=true;
webView.setWebViewClient(new WebViewClient() {
ProgressDialog progressDialog;
public boolean shouldOverrideUrlLoading(final WebView view,final String url) {
if (!url.contains("google")) {
// Could be cleverer and use a regex
// Open links in new browser
//view.getContext().startActivity(
// new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
// Here we can open new activity
flag=false;
} else {
// Stay within this webview and load url
view.loadUrl(url);
System.out.println("url: "+url);
showAlert(url);
flag=true;
}
return flag;
}
// Show loader on url load
public void onLoadResource(WebView view, String url) {
// if url contains string androidexample
// Then show progress Dialog
if (progressDialog == null && url.contains("google")) {
// in standard case YourActivity.this
progressDialog = new ProgressDialog(WebView2.this);
progressDialog.setMessage("Loading...");
progressDialog.show();
}
}
// Called when all page resources loaded
public void onPageFinished(WebView view, String url) {
try {
// Close progressDialog
if (progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
});
现在,创建 showAlert(字符串URL)
方法如下:
public void showAlert(final String url) {
AlertDialog.Builder builder = new AlertDialog.Builder(WebView2.this);
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setTitle("Go to this url?");
builder.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if(!url.contains("google")) {
//flag=false;
}else{
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
//flag=true;
}
}
});
builder.setNeutralButton("No", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
webView.stopLoading();
}
});
AlertDialog alert = builder.create();
alert.show();
}
这篇关于AlertDialog中的WebView加载网址前的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文