android - 检查 Url 完全加载的 Webview
问题描述
我想显示一个进度条,直到所有资源都加载完毕。我试过下面的代码,但是当资源开始加载时progressBar会消失。
dataBinding.webviewGallery.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!loadingFinished) {
redirect = true;
}
return false;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
loadingFinished = false;
}
@Override
public void onPageFinished(WebView view, String url) {
if (!redirect) {
loadingFinished = true;
}
if (loadingFinished && !redirect && !loadingError) {
dataBinding.progressBar.setVisibility(View.GONE);
} else {
redirect = false;
}
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
dataBinding.progressBar.setVisibility(View.GONE);
loadingError = true;
Toast.makeText(requireActivity(), "Failed to load URL. Please try again later.", Toast.LENGTH_SHORT).show();
goHome();
}
});
我也尝试过 WebChromeClient,它也不起作用。
dataBinding.webviewGallery.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
dataBinding.progressbarWebpage.setProgress(newProgress);
if(newProgress==100){
dataBinding.progressbarWebpage.setVisibility(View.GONE);
}
}
});
是否有正确的方法来查找 URL 何时完全加载?TIA
解决方案
您的问题的原因是因为您正在 onProgressChanged() 上编写代码。只要进度发生变化,就会执行此函数。在您的情况下,进度的初始值为 0,因为进度没有开始。当progresd 开始时,即progress 值改变,函数被执行,因此progress 消失了。解决方案:使用 onprogresscompleted() 函数添加您的进度逻辑。
推荐阅读
- three.js - 如何从任意大小的顶点数组创建面?
- css - 无法在 Go webapp 中提供外部 CSS 文件
- r - 使用 lapply 添加动态列
- algorithm - 平面扫描算法 - 位于磁盘之外的点
- c# - 尝试使用 INamedBucketProvider 从 C# 应用程序连接 Couchbase 时访问被拒绝错误
- sql - 在 postgresql 中将新对象附加到 JSONB
- algorithm - 如何处理基于排序的算法/理解代码背后的直觉?
- android - 错误:活动布局膨胀期间的 ResourcesNotFoundException
- assembly - 如何设置寄存器 CR0 的 MP 和 TS 标志位?x86 法斯姆
- angular - 如何在角表中的整个单元格周围放置标签