Java 加载webview后,如何关闭进度对话框?
加载webview后,我需要对我的代码做些什么才能使对话框Java 加载webview后,如何关闭进度对话框?,java,android,webview,progressdialog,dismiss,Java,Android,Webview,Progressdialog,Dismiss,加载webview后,我需要对我的代码做些什么才能使对话框关闭() public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); CookieSyncManager.createInstance(this); CookieSy
关闭()
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
webview = (WebView) findViewById(R.id.webview);
webview.setWebViewClient(new homeClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setPluginsEnabled(true);
webview.loadUrl("http://google.com");
ProgressDialog pd = ProgressDialog.show(Home.this, "",
"Loading. Please wait...", true);
}
我试过了
public void onPageFinshed(WebView view, String url){
pd.dismiss();
}
没有工作。您如何在
onPageFinshed()中访问pd
?(您确定页面加载时确实调用了它吗?)
在onCreate()
中,尝试将pd
传递给homeClient
,以便homeClient
可以关闭对话框
您的家庭客户端应如下所示:
private class homeClient extends WebViewClient {
private ProgressDialog pd;
public homeClient(ProgressDialog pd) {
this.pd = pd;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished (WebView view, String url) {
if (pd.isShowing()) {
pd.dismiss();
}
}
}
在您的onCreate()
中:
:o
setWebViewClient(新的homeClient())homeClient()
试试这个
...
...
...
webview = (WebView) findViewById(R.id.webview);
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
if (progressBar.isShowing()) {
progressBar.dismiss();
}
}
webview.loadUrl("http://www.google.com");
}
更新::
这是一个很好的例子
这没关系
public class WordActivity extends Activity {
private WebView webview;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
Bundle objetbunble = this.getIntent().getExtras();
webview = (WebView) findViewById(R.id.webview);
final Activity activity = this;
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onLoadResource (WebView view, String url) {
if (progressDialog == null) {
progressDialog = new ProgressDialog(activity);
progressDialog.setMessage("Chargement en cours");
progressDialog.show();
}
}
public void onPageFinished(WebView view, String url) {
if (progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
}
}
});
webview.loadUrl("http://www.example.com");
}
}
@Jorgesys这不是100%准确。如果一个页面中有多个iFrame,则会有多个onPageFinished(和onPageStarted)。如果你有几个重定向,它也可能失败。我认为这种方法解决了所有问题:
boolean loadingFinished = true;
boolean redirect = false;
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) {
if (!loadingFinished) {
redirect = true;
}
loadingFinished = false;
webView.loadUrl(urlNewString);
return true;
}
@Override
public void onPageStarted(WebView view, String url) {
loadingFinished = false;
//SHOW LOADING IF IT ISNT ALREADY VISIBLE
}
@Override
public void onPageFinished(WebView view, String url) {
if(!redirect){
loadingFinished = true;
}
if(loadingFinished && !redirect){
//HIDE LOADING IT HAS FINISHED
} else{
redirect = false;
}
}
});
如果您只是想在WebView中加载网页之前显示进度。您只需请求窗口功能进度即可
在setContentView(R.layout.blahblah)之前代码>
并在onProgressChanged中显示它的进度
final Activity context= this;
webview.setWebChromeClient(new WebChromeClient()
{
public void onProgressChanged(WebView webView, int progress)
{
activity.setProgress(progress * 1000);
}
});
如果您想添加自己的ProgressDialog,请使用WebviewClient
webView.setWebViewClient(new WebViewClient() {
ProgressDialog rogressDialog ;
@Override
public void onPageStarted(WebView view, String url, Bitmap bitmap) {
progressDialog = ProgressDialog.show(context, "Loading...", "Please wait...");//where context = YourActivity.this;
super.onPageStarted(view, url, bitmap);
}
@Override
public void onPageFinished(WebView view, String url) {
progressDialog .dismiss();
super.onPageFinished(view, url);
}
});
webView.loadUrl(url);
上述代码将为您在webview中导航到的每个传入链接显示一个进度对话框。是否调用onPageFinished?在ui线程中?对不起,我本来应该这样做的,我把整个类放在了我现在的方式上。如果你向上滚动,你可以看到我尝试了一个onPageFinshed,但它不起作用。也许我这样做是不对的?或者我把它放在哪里了?很好的例子,我喜欢!酷…我已经错过了几分钟的部分。嘿,塞缪尔,我已经使用了你的代码,用于首次发布的网络视图,一切正常。因此,当我第二次导航到同一个webview时,在pagefinish后progressdialog连续显示(注意:等待了10分钟,但progressdialog没有关闭),请帮助我如何执行tat。。先谢谢你。。。
final Activity context= this;
webview.setWebChromeClient(new WebChromeClient()
{
public void onProgressChanged(WebView webView, int progress)
{
activity.setProgress(progress * 1000);
}
});
webView.setWebViewClient(new WebViewClient() {
ProgressDialog rogressDialog ;
@Override
public void onPageStarted(WebView view, String url, Bitmap bitmap) {
progressDialog = ProgressDialog.show(context, "Loading...", "Please wait...");//where context = YourActivity.this;
super.onPageStarted(view, url, bitmap);
}
@Override
public void onPageFinished(WebView view, String url) {
progressDialog .dismiss();
super.onPageFinished(view, url);
}
});
webView.loadUrl(url);
wv1.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(Entertainment.this, description, Toast.LENGTH_SHORT).show();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
progressDialog.show();
}
@Override
public void onPageFinished(WebView view, String url) {
progressDialog.dismiss();
String webUrl = wv1.getUrl();
}
});
wv1.loadUrl(url);