android webview progress:有什么好的解决方案吗?
我希望在加载页面时有一个某种忙指示器。我的指示灯将全屏显示,就像启动屏幕一样。这是因为android webview在开始加载之前会将页面清空为白色,这与普通浏览器不同 可以提出一个简单的解决方案。例如,在android webview progress:有什么好的解决方案吗?,android,android-webview,Android,Android Webview,我希望在加载页面时有一个某种忙指示器。我的指示灯将全屏显示,就像启动屏幕一样。这是因为android webview在开始加载之前会将页面清空为白色,这与普通浏览器不同 可以提出一个简单的解决方案。例如,在onPageStarted()中设置loading true,在onPageFinished()中设置false 问题是,我正在加载的网站一次点击就会导致多个开始/完成周期。也许这是重定向或iFrame。我不确定。。。但结果是“忙碌”指示灯不安地忽亮忽灭 考虑到这一点,另一个想法是保持页面加载
onPageStarted()
中设置loading true,在onPageFinished()
中设置false
问题是,我正在加载的网站一次点击就会导致多个开始/完成周期。也许这是重定向或iFrame。我不确定。。。但结果是“忙碌”指示灯不安地忽亮忽灭
考虑到这一点,另一个想法是保持页面加载计数-在onPageStarted()
中递增,在onPageFinished()
中递减。像这样的,
private int loadingCount = 0;
@Override
public void onPageFinished(WebView view, String url) {
loadingCount--;
if (loadingCount == 0) {
setLoading(false);
}
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if (loadingCount == 0) {
setLoading(true);
}
loadingCount++;
}
我遇到了这个问题:页面开始/页面完成不匹配。我不确定确切的原因,但我认为它可能必须执行w/重定向
有什么想法吗?
谢谢。试试这个:
private boolean loadingFinished = true, redirect = false;
public class myWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) {
if (!loadingFinished) {
redirect = true;
}
loadingFinished = false;
view.setVisibility(View.VISIBLE);
view.loadUrl(urlNewString);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
setTitle(url);
loadingFinished = false;
progressDialog = new ProgressDialog(FacebookWebView.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage(" Loading...");
progressDialog.setCancelable(true);
progressDialog.show();
}
@Override
public void onPageFinished(WebView view, String url) {
if (!redirect) {
loadingFinished = true;
}
if (loadingFinished && !redirect) {
if (progressDialog.isShowing()){
progressDialog.dismiss();
}
//finish();
} else {
redirect = false;
}
}
我不太确定,但这应该可以解决重定向的问题。如果在同一页上有多个帧,可能需要在onPageFinished中计算到帧数,然后关闭“忙碌对话框”。请尝试以下方法:
private boolean loadingFinished = true, redirect = false;
public class myWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) {
if (!loadingFinished) {
redirect = true;
}
loadingFinished = false;
view.setVisibility(View.VISIBLE);
view.loadUrl(urlNewString);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
setTitle(url);
loadingFinished = false;
progressDialog = new ProgressDialog(FacebookWebView.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage(" Loading...");
progressDialog.setCancelable(true);
progressDialog.show();
}
@Override
public void onPageFinished(WebView view, String url) {
if (!redirect) {
loadingFinished = true;
}
if (loadingFinished && !redirect) {
if (progressDialog.isShowing()){
progressDialog.dismiss();
}
//finish();
} else {
redirect = false;
}
}
我不太确定,但这应该可以解决重定向的问题。如果同一页上有多个帧,可能会将onPageFinished计算到帧数,然后关闭“忙碌对话框”,这应该是一个解决方案。您可以在
shouldOverrideUrlLoading()
中反复将可见性设置为可见
,但不要将其设置为其他任何设置。这是否正确?您在shouldOverrideUrlLoading()
中反复将可见性设置为VISIBLE
,但从未将其设置为其他任何设置。这是正确的吗?