Android WebView加载url后关闭ProgressDialog无效
我创建了一个webview,当页面加载时,会出现一个ProgressDialog。好吧,直到这一点,所有的工作。 但是现在我想在加载url后关闭ProgressDialog。 这不管用 我的代码:Android WebView加载url后关闭ProgressDialog无效,android,url,webview,dialog,progressdialog,Android,Url,Webview,Dialog,Progressdialog,我创建了一个webview,当页面加载时,会出现一个ProgressDialog。好吧,直到这一点,所有的工作。 但是现在我想在加载url后关闭ProgressDialog。 这不管用 我的代码: private WebView webViewNews; private ProgressDialog progressDialogWebViewNews; webViewNews = (WebView) findViewById(R.id.webViewNews); WebSettings
private WebView webViewNews;
private ProgressDialog progressDialogWebViewNews;
webViewNews = (WebView) findViewById(R.id.webViewNews);
WebSettings webSettings = webViewNews.getSettings();
webSettings.setJavaScriptEnabled(true);
webViewNews.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressDialogWebViewNews = new ProgressDialog(MainActivity.this);
progressDialogWebViewNews.setCancelable(false);
progressDialogWebViewNews.setTitle("Demo...");
progressDialogWebViewNews.setMessage("Demo");
progressDialogWebViewNews.show();
}
@Override
public void onPageFinished(WebView view, String url) {
progressDialogWebViewNews.dismiss();
super.onPageFinished(view, url);
}
});
webViewNews.loadUrl("http://www.demo.com");
也许您应该创建一个简单的WebView对象:
WebView webView = (WebView) getActivity().findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("yourURL");
final ProgressDialog progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage("Loading...");
progressDialog.show();
progressDialog.setCancelable(false);
webView.setWebViewClient(new WebViewClient()
{
public void onPageFinished(WebView view, String url)
{
progressDialog.dismiss();
}
});
它对我很有用。当你把一个变量传递给一个匿名类时,这个变量会自动变成final,从而阻止它改变。尝试将“进度”对话框改为内部客户端类的成员。这也是一种更好的设计,使您的代码更易于维护
class MyClient extends WebViewClient() {
private ProgressDialog progressDialogWebViewNews;
public MyClient(Context c){
progressDialogWebViewNews = new ProgressDialog(c);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressDialogWebViewNews.setCancelable(false);
progressDialogWebViewNews.setTitle("Demo...");
progressDialogWebViewNews.setMessage("Demo");
progressDialogWebViewNews.show();
}
@Override
public void onPageFinished(WebView view, String url) {
progressDialogWebViewNews.dismiss();
super.onPageFinished(view, url);
}
}
webViewNews.setWebViewClient(new MyClient(MainActivity.this));
删除
super.onPageFinished(视图,url)
,然后在回调方法中关闭进度对话框之前,首先检查是否显示进度对话框
If (progressDialogWebViewNews.showing){
progressDialogWebViewNews.dismiss();
}
尝试使用
setVisibility
方法将可见性设置为GONE
@NoLuckPulak这是一个非常有趣的解决方法,但这是一个非常糟糕的设计。将导致内存泄漏。您是对的@SoroushASorry,但问题仍然存在。setCancelable
用于用户交互。与解雇索鲁沙无关我知道,事实上这很奇怪